2015-10-07 29 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>