2011-12-21 162 views
2

我正嘗試創建兩個應該可以互相訪問的WCF服務。但是,我收到以下錯誤消息: 服務器在處理請求時遇到錯誤。異常消息是'無法找到在ServiceModel客戶端配置部分中引用合同'AddonWCFService.IService1'的默認端點元素。這可能是因爲沒有爲您的應用程序找到配置文件,或者因爲在客戶端元素中找不到匹配此合同的端點元素。'。服務無法在WCF中找到其他服務的端點

我調用test()方法從這項服務中

namespace CustomersService 
{ 
    [ServiceContract] 
    public interface ICustomers 
    { 
     [OperationContract] 
     [WebGet] 
     string Test(); 
    } 

    public class Customers : ICustomers 
    { 
     private int m_i = 0; 

     public int GetCounter() 
     { 
      return m_i; 
     } 

     public void Test() 
     { 
      AddonWCFService.Service1Client foo = new AddonWCFService.Service1Client(); 
     } 
    } 
} 

其他服務

namespace AddonWCFWebservice 
{ 
    [ServiceContract] 
    public interface IService1 
    { 
     [OperationContract] 
     void Init(); 
    } 


    public class Service1 : IService1 
    { 
     public void Init() 
     { 

     } 
    } 
} 

我的webconfig:

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <services> 

      <service behaviorConfiguration="MyserviceBehavior" name="CustomersService.Customers"> 
       <endpoint name="ws" address="ws" binding="wsHttpBinding" contract="CustomersService.ICustomers"/> 
       <endpoint name="" 
          address="" 
          binding="webHttpBinding" 
          contract="CustomersService.ICustomers" 
          behaviorConfiguration="WebBehavior"/> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 
      <service name="AddonWCFWebservice.Service1" behaviorConfiguration="MyserviceBehavior"> 
       <endpoint address="" binding="wsHttpBinding" contract="AddonWCFWebservice.IService1"/> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 
     </services> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="MyserviceBehavior"> 
        <serviceMetadata httpGetEnabled="true"/> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
       </behavior> 
      </serviceBehaviors> 
      <endpointBehaviors> 
       <behavior name="WebBehavior"> 
        <webHttp /> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
    </system.serviceModel> 
    <system.web> 
     <compilation debug="true"/>   
     <customErrors mode="Off"/> 
    </system.web> 
</configuration> 

兩種服務駐留在同一Active Directory IIS。我使用網址添加了VS C#項目的服務參考,例如http://www.foobar.baz/Test/Service1.svchttp://www.foobar.baz/Test/Customers.svc

這可能是很明顯的,但對於整個WCF業務來說我還是比較新的。謝謝!

更新:解決方案是將客戶端部分添加到我的webconfig。此外,我使用basicHttpBinding而不是wsHttpBinding,因爲我的安全性將在其他地方被合併,因爲它是一項公共服務。我必須匹配客戶端的結合,以服務部分的結合:既basicHttpBinding的

<?xml version="1.0"?> 
<configuration> 
    <system.serviceModel> 
     <client> 
      <endpoint 
      name="" 
      address="http://demo.mydomain.baz/TestService/Service1.svc" 
      binding="basicHttpBinding" 
      contract="AddonWCFService.IService1" /> 
     </client> 

     <services> 
      <service behaviorConfiguration="MyserviceBehavior" name="CustomersService.Customers"> 
       <endpoint name="ws" address="ws" binding="wsHttpBinding" contract="CustomersService.ICustomers"/> 
       <endpoint name="" 
          address="" 
          binding="webHttpBinding" 
          contract="CustomersService.ICustomers" 
          behaviorConfiguration="WebBehavior"/> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 
      <service name="AddonWCFWebservice.Service1" behaviorConfiguration="MyserviceBehavior"> 
       <endpoint address="" binding="basicHttpBinding" contract="AddonWCFWebservice.IService1"/> 
       <!-- 
       <endpoint address="" 
          binding="webHttpBinding" 
          contract="AddonWCFWebservice.IService1" 
          behaviorConfiguration="WebBehavior"/> 
       --> 
       <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
      </service> 


     </services> 
     <behaviors> 
      <serviceBehaviors> 
       <behavior name="MyserviceBehavior"> 
        <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
        <serviceMetadata httpGetEnabled="true"/> 
        <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
        <serviceDebug includeExceptionDetailInFaults="true"/> 
       </behavior> 
      </serviceBehaviors> 
      <endpointBehaviors> 
       <behavior name="WebBehavior"> 
        <webHttp /> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
    </system.serviceModel> 
    <system.web> 
     <compilation debug="true"/>   
     <customErrors mode="Off"/> 
    </system.web> 
</configuration> 

回答

3

配置問題是您沒有客戶端配置。您只有服務器部件。您需要有端點的客戶端元素。看看這裏:http://msdn.microsoft.com/en-us/library/ms731745.aspx

如果你不太確定你的配置技能,我會建議你打開你的配置與SvcConfigEditor.exe。您將立即看到配置。 你可以在這裏找到它:C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ SvcConfigEditor.exe。 如果你會這樣做 - 你會看到沒有配置客戶端

+0

對!謝謝!那就是訣竅。不知道有客戶部分。現在我明白了錯誤信息,它實際上很清楚:「[...] ServiceModel客戶端配置部分」。現在要弄清楚如何解決這個錯誤:「ChannelFactory的端點必須指定一個有效的地址」 – Nebula 2011-12-22 09:19:41

+0

感謝這個答覆,我的代碼現在可以工作,請參閱問題中的解決方案。 – Nebula 2011-12-22 09:35:13

0

我想你指定在你的配置文件錯誤的服務合同。

此行這裏:

<endpoint address="" binding="wsHttpBinding" contract="AddonWCFWebservice.IService1"/>

指定合同 「AddonWCFWebservice.IService1」 時,它應該像 「AddonService.IService1」(不帶 「WCF」)。

+0

我改變了服務引用的命名空間爲AddonWCFWebservice,就像在我的項目文件中一樣。仍然錯誤仍然存​​在,但是現在在「無法找到默認端點元素在ServiceModel客戶端配置部分中引用合同'AddonWCFService.IService1'」。正如你所看到的,這個是web.config。它與兩個服務都在同一個IIS活動目錄中有什麼關係?任何關於如何調試的指針? – Nebula 2011-12-22 08:28:31

相關問題