WCF - 从客户端和服务器端调用相同的服务

时间:2010-06-15 23:16:32

标签: asp.net jquery ajax wcf json

我有一个简单的WCF服务,我通过服务引用从代码后面调用服务器端。它用于验证和工作,并由Visual Studio自动设置并使用SOAP我认为因为绑定是wsHttpBinding。

我想使用相同的WCF服务,但是使用ajax()从jQuery调用它的客户端。我正试图通过这些instructions来实现它。

但是,如果我进行更改以使客户端调用工作,我必须添加下面的装饰,我认为这将破坏服务器端的工作,并且还更改web.config中的system.serviceModel部分。

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

如何从服务器端和客户端(jQuery / ajax)调用WCF服务?

或换句话说,这可能是错误的措辞,端点是否可以有多个绑定?

1 个答案:

答案 0 :(得分:0)

WCF中的端点有一个ABC

  • 地址
  • 结合
  • 合同

因此:不,单个端点不能具有多个绑定。但是你可以为同一个合同设置多个端点!

因此,如果您希望通过SOAP和REST公开两个具有基本相同功能的方法,则需要有两个端点。

您可以定义自己的服务方法,以便从SOAP和REST中调用,如您提到的链接所示。

您需要的是两个独立的端点:

<services>
   <service name="YourService">
     <endpoint
           address="http://YourServer/YourVirtualDir/YourService.svc"
           binding="wsHttpBinding"
           contract="IYourService" />
     <endpoint
           address="http://YourServer/YourVirtualDir/YourService2.svc"
           binding="webHttpBinding"
           behaviorConfiguration="webCallable"
           contract="IYourService" />
   </service>
</services>

您必须定义包含<webHttp/>行为的端点行为 - 或者您需要一个使用WebServiceHost的* .svc文件(而不是普通ServiceHost)托管您的REST服务。

如您所见,您现在有两个单独的端点(在vritual目录中有两个单独的* .svc文件),两个单独的地址 - 但两者共享相同的合同(定义相同的操作)。