如何在运行时设置契约命名空间

本文关键字:契约 命名空间 设置 运行时 | 更新日期: 2023-09-27 18:12:50

我在客户端app.config中有以下内容。

<client>
    <endpoint address=""
        binding="basicHttpBinding" bindingConfiguration="SecureBinding"
        contract="Project.Services.Contract.IMyContract" name="Endpoint_Default">
        <identity>
            <servicePrincipalName value="host/mikev-ws" />
        </identity>
    </endpoint>
</client>

我有以下代码在运行时设置一个端点。

private EndpointAddress GetEndpoint(string serverAddress, string serviceName)
{
    string endpointURL = string.Format("http://{0}/Services/{1}.svc"
        , serverAddress, serviceName);
    EndpointIdentity spn = EndpointIdentity.CreateSpnIdentity("host/mikev-ws");
    Uri uri = new Uri(endpointURL);
    EndpointAddress endpoint = new EndpointAddress(uri, spn);
    return endpoint;
}

如何在运行时设置合约值?

谢谢

如何在运行时设置契约命名空间

你不把合同和EndpointAddress联系起来,你把它和ServiceEndpoint联系起来。反过来,您还可以将EndpointAddressServiceEndpoint相关联,如下所示:

ServiceEndpoint httpEndpoint = new ServiceEndpoint 
(
    ContractDescription.GetContract(
        typeof(Project.Services.Contract.IMyContract), 
        typeof(Project.Services.MyContract)),
    new WSHttpBinding { ... },
    GetEndpoint(serverAddress, serviceName)
);

最终,应该将ServiceEndpoint的实例添加到ServiceHost:

host.AddServiceEndpoint(httpEndpoint);