具有JSON,JSONP和SOAP端点的WCF服务

时间:2011-01-14 06:31:04

标签: wcf soap jsonp

我使用SOAP端点配置了传统的WCF服务。在我的客户端项目中,我添加了服务引用等。这些正在按预期工作。

我创建了一个启用JSONP的WCF服务,对.svc文件,web配置等进行了修改。我创建了一个测试客户端页面进行测试。我成功调用了JSONP服务。

但是,我对Web配置所做的更改破坏了SOAP服务的服务引用。我想使用两种类型的终点。我不知道如何配置服务和Web配置。

如果只获取http,那么每个操作(无论是用于SOAP还是JSONP)都可以用以下内容进行修饰:[WebGet(ResponseFormat = WebMessageFormat.Json)]

然后我的服务类需要:[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

当我现在尝试在我的客户端项目中更新我的服务引用时,我正在

  

绑定实例已与侦听URI“http:// flixsit:1000 / FlixsitWebServices.svc”相关联。如果两个端点想要共享相同的ListenUri,则它们还必须共享相同的绑定对象实例。两个冲突的端点在AddServiceEndpoint()调用,配置文件或AddServiceEndpoint()和config的组合中指定。

将SOAP配置添加到我的webconfig也会破坏JSONP端点。在客户端调用JSONP不需要客户端服务引用(或代理生成),但SOAP确实如此?

我的服务WebConfig:

<system.serviceModel>
  <behaviors>
    <endpointBehaviors>
      <behavior name="webHttpBehavior">
        <webHttp />
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="DefaultBehaviors">          
        <serviceMetadata httpGetEnabled="true" />          
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <webHttpBinding>
      <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
    </webHttpBinding>
    <basicHttpBinding>
      <binding name="BasicHttpEndpointBinding" />
    </basicHttpBinding>
  </bindings>
  <services>
    <service name="Flixsit.Services.FlixsitWebServices" behaviorConfiguration="DefaultBehaviors">
      <endpoint name="JSONPEndPoint" address=""
                                   binding="webHttpBinding"
                                   bindingConfiguration="webHttpBindingWithJsonP"
                                   contract="Flixsit.Services.IFlixsitWebServices"
                                   behaviorConfiguration="webHttpBehavior" />
      <endpoint name="HttpEndPoint"  address=""
                                   binding="basicHttpBinding"
                                   contract="Flixsit.Services.IFlixsitWebServices" />
      <host>
        <baseAddresses>
          <add baseAddress="http://Flixsit:1000/FlixsitWebServices.svc" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

1 个答案:

答案 0 :(得分:0)

错误清楚地描述了问题。您有两个具有相同地址但绑定不同的endpoits。这个不允许。使用绑定webHttpBinding在端点中设置address =“jsonp”。您将在/ 服务 .svc / jsonp

上调用端点