2011-09-28 80 views
2

我收到以下錯誤,當我嘗試使用我的WCF服務WCF客戶端無法看到終點,但WCF客戶端可以連接到基址

找不到名稱爲終結點元素的「http://本地主機:8080 /供應商在ServiceModel客戶端配置節/基本」和合同‘Provider.IProvider’

我可以連接但通過WCF測試客戶端我的基址上http://localhost:8080/Provider

我試着更新我的服務引用和沒有工作,任何人都知道我的設置有什麼問題

public ServiceHost ProviderServiceHost { get; set; } 

    private void StartProvider() 
    { 
     if (ProviderServiceHost != null) 
      Abort(); 
     ProviderServiceHost = new ServiceHost(typeof(Provider), new Uri("http://localhost:8080/Provider")); 
     var binding = new BasicHttpBinding 
     { 
      Name = "basicBinding", 
      HostNameComparisonMode = HostNameComparisonMode.WeakWildcard, 
      Security = { Mode = BasicHttpSecurityMode.None } 
     }; 

     var metadataBehavior = ProviderServiceHost.Description.Behaviors.Find<ServiceMetadataBehavior>(); 
     if (metadataBehavior == null) 
     { 
      metadataBehavior = new ServiceMetadataBehavior { HttpGetEnabled = true }; 
      ProviderServiceHost.Description.Behaviors.Add(metadataBehavior); 
     } 

     ProviderServiceHost.AddServiceEndpoint(typeof(IProvider), binding, "http://localhost:8080/Provider/basic"); 

     ProviderServiceHost.Open(); 
    } 

我的客戶端連接這樣

private static ProviderClient _proxy = new ProviderClient(http://localhost:8080/Provider/basic); 

如果我不把你的地址,然後我得到這個例外

消息「找不到默認終結點元素引用合同「提供商ServiceModel客戶端配置「部分中的」.IProvider「。這可能是因爲沒有配置文件找到您的應用程序,或者是因爲匹配這份合同沒有終結點元素可以在客戶端元素中找到。」

回答

1

您正在使用的客戶端配置?當它出現您正在使用的字符串ClientBase代理我希望你已經使用'添加服務引用...',並且只是默認的配置文件

您使用的過載是new ServiceClient(string endpointConfigurationName) - 字符串值代表一個名稱,而不是地址。您檢查您的配置文件,你會看到一個client部分已添加:

<client> 
    <endpoint address="http://localhost:8080/Provider/basic" 
       binding="basicHttpBinding" 
       bindingConfiguration="basicBinding_IProvider" 
       contract="ServiceReference1.ITest" 
       name="basicBinding_IProvider" /> 
</client> 

所以,如果你改變使用此名稱屬性中的客戶端構造它應該爲你工作好。

private static ProviderClient _proxy = 
    new ProviderClient("basicBinding_IProvider"); 

。如果是使用配置文件,並希望在代碼中指定的地址,你可以使用不同的ClientBase構造另一方面:

using System.ServiceModel; 
// ... 

_client = new ProviderClient(new BasicHttpBinding(), 
      new EndpointAddress("http://localhost:8080/Provider/basic")); 

有在ClientBase類許多不同的重載的(你ProviderClient),它允許你指定的各種屬性。

+0

由於在代碼中配置固定的問題 –