2015-10-07 33 views
1
<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> 
    <bindings> 
     <customBinding> 
      <binding name="httpBinding"> 
       <binaryMessageEncoding /> 
       <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/> 
      </binding> 
      <binding name="httpsBinding"> 
       <binaryMessageEncoding/> 
       <httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/> 
      </binding> 
     </customBinding> 
    </bindings> 
    <services> 
     <service name="MyNamespace.MyIService" behaviorConfiguration="MyNamespace.MyIService" > 

      <endpoint address="http://wcf-client-url/virtualDirectory/MyService.svc" 
         binding="customBinding" contract="MyNamespace.MyIService" 
         name="httpBinding"/> 
      <endpoint address="https://wcf-client-url/virtualDirectory/MyService.svc" 
         binding="customBinding" bindingConfiguration="httpsBinding" 
         contract="MyNamespace.MyIService" name="httpsBinding" />    
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="MyNamespace.MyIService" > 
       <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
       <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
      </behavior> 
      <behavior name=""> 
       <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" /> 
       <serviceDebug includeExceptionDetailInFaults="true"/> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <client> 
     <endpoint address="http://wcf-client-url/virtualDirectory/MyService.svc" 
         binding="customBinding" 
         bindingConfiguration="httpBinding" 
         contract="MyNamespace.MyIService" 
         name="httpBinding" /> 

     <endpoint address="https://wcf-client-url/virtualDirectory/MyService.svc" 
        binding="customBinding" 
        bindingConfiguration="httpsBinding" 
        contract="MyNamespace.MyIService" 
        name="httpsBinding" /> 
    </client> 
</system.serviceModel> 

我在IIS中承载的WCF服务中拥有上述配置。我可以成功浏览到浏览器中的服务,因为你可以观察我想使用customBinding。WCF采摘basicHttpBinding&忽略定义的customBindings

当我使用Visual Studio在我的客户端应用程序中使用VS内置添加服务引用对话框添加对此服务的引用时,下面是Visual Studio为我创建的客户端端点。

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_MyIService" /> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://wcf-client-url/virtualDirectory/MyService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyIService" 
     contract="ServiceReference1.MyIService" name="BasicHttpBinding_MyIService" /> 
    </client> 
    </system.serviceModel> 

什么我不理解就是为什么VS正在为我的客户basicHttpBinding的但我已经定义了服务器上的customBinding。另外,当我在“WCF测试客户端”中测试我的服务,然后双击WCF测试客户端中的配置文件时,我发现它确实在测试客户端中显示了下面的配置。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <basicHttpBinding> 
       <binding name="BasicHttpBinding_MyIService" /> 
      </basicHttpBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://myPCHostName/virtualDirectory/MyService.svc" 
       binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_MyIService" 
       contract="MyIService" name="BasicHttpBinding_MyIService" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

我有点新本WCF开发&我不是清楚地了解我的customBinding是如何被忽略。

从我上面的配置中,BasicHttpBinding被设置为默认绑定的任何位置,或者在那里我可以完全删除它,即使我似乎无法确定它在该配置中的设置。

+0

'basicHttpBinding'是默认的,开箱即用的没有一个明确的绑定配置使用的服务绑定的。您可以按照Mimas的说法操作,也可以通过在配置中省略“name”属性来定义“默认”绑定配置。 – Tim

+0

这解决了吗?因为我有同样的问题。 – John

回答

1

尝试指定行为配置绑定配置在服务端的两个端点。您仅为https端点指定了绑定配置,并且完全没有对此行为执行此操作。

应该像

<bindings> 
    <customBinding> 
     <binding name="httpBinding"> 
      <binaryMessageEncoding /> 
      <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/> 
     </binding> 
     <binding name="httpsBinding"> 
      <binaryMessageEncoding/> 
      <httpsTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"/> 
     </binding> 
    </customBinding> 
</bindings> 
<services> 
    <service name="MyNamespace.MyIService" behaviorConfiguration="MyNamespace.MyIService" > 
     <endpoint address="http://wcf-client-url/virtualDirectory/MyService.svc" 
      binding="customBinding" 
      contract="MyNamespace.MyIService" 
      bindingConfiguration="httpBinding" 
      behaviorConfiguration="httpEndpoint" 
      name="httpBinding"/> 
     <endpoint address="https://wcf-client-url/virtualDirectory/MyService.svc" 
      binding="customBinding" 
      bindingConfiguration="httpsBinding" 
      behaviorConfiguration="httpEndpoint" 
      contract="MyNamespace.MyIService" 
      name="httpsBinding" />    
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
     <behavior name="httpEndpoint" > 
      <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true"/> 
      <dataContractSerializer maxItemsInObjectGraph="2147483646"/> 
     </behavior> 
    </serviceBehaviors> 
</behaviors>