gpt4 book ai didi

.net - JSON 和 SOAP WCF 服务?

转载 作者:行者123 更新时间:2023-12-02 09:13:53 25 4
gpt4 key购买 nike

我最近将 WCF SOAP 服务转换为 REST/JSON 服务。如回复here中详述,Visual Studio 的“添加服务引用”功能无法为 JSON 服务生成代码。该问题的答案中的链接文章暗示了将 WCF 公开为 REST 和 SOAP 来解决该问题的可能性,但它没有提供任何详细信息。

有谁知道这是否可行,如果可以,如何设置?

总是可以选择自己编写代码生成器,它读取 WCF REST 服务的 WSDL 并生成 C# 类,但似乎应该有比这更简单的解决方案。

仅供引用,我的 web.config:

<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="RestBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="GetBehavior" >
<serviceMetadata httpGetEnabled="true" />
<serviceDebug
httpHelpPageEnabled="true"
includeExceptionDetailInFaults="true"
/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<webHttpBinding>
<binding name="WebHttpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="None" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service name="Service" behaviorConfiguration="GetBehavior">
<endpoint address=""
binding="webHttpBinding"
behaviorConfiguration="RestBehavior"
contract="IService"
bindingConfiguration="WebHttpBinding">
</endpoint>
</service>
</services>
</system.serviceModel>

我的服务方法都具有以下属性:

[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]

最佳答案

有可能,您需要创建两个端点:一个用于soap,另一个用于json。我在我的项目中已经这样做了,并且可以通过SoapUI或Fiddler(json)同时访问服务,这里是示例配置:

<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="BehaviourService">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="BehaviourWebHttp">
<webHttp defaultBodyStyle="Wrapped" automaticFormatSelectionEnabled="True" faultExceptionEnabled="True" />
</behavior>
</endpointBehaviors>
</behaviors>

<services>
<service name="NameSpace.MyService" behaviorConfiguration="BehaviourService" >
<endpoint address ="soap" binding="basicHttpBinding" contract="NameSpace.IMyService"></endpoint>
<endpoint binding="webHttpBinding" behaviorConfiguration="BehaviourWebHttp" contract="NameSpace.IMyService" ></endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:7689/MyService.svc"/>
</baseAddresses>
</host>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

同时让你的契约(Contract)看起来像:

[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "MyMethod", Method = "POST")]
bool MyMethod();

然后您可以通过“localhost:7689/MyService.svc?wsdl”访问 SOAP,通过以下方式访问 JSON“本地主机:7689/MyService.svc/MyMethod”

关于.net - JSON 和 SOAP WCF 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17777105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com