当我尝试使用我的wcf服务时出现以下错误
找不到名称为“http:// localhost:8080 / Provider / basic”的端点元素,并且在ServiceModel客户端配置部分中找不到“Provider.IProvider”
然而,我可以通过http://localhost:8080/Provider
上的WCF测试客户端连接到我的基地址我已尝试更新我的服务参考但是没有用,任何人都知道我的设置有什么问题
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客户端配置部分找到引用合同'Provider.IProvider'的默认端点元素。这可能是因为找不到您的应用程序的配置文件,或者因为找不到与此合同匹配的端点元素在客户端元素中。“串
答案 0 :(得分: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>
因此,如果您将Client构造函数更改为使用此Name属性,那么它应该更适合您。
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
)中有许多不同的重载,允许您指定各种属性。