调用简单服务失败,显示错误的错误消息

Fjo*_*odr 2 c# wcf

当我调用此服务时,收到此错误消息:

ContractDescription没有任何操作; 合同必须至少有一项操作

因为我的界面函数[OperationContract()]定义了属性,所以没有任何意义.

界面:

[ServiceContract()]
public interface ITest
{

    [OperationContract()]
    bool Connect(string password);

}
Run Code Online (Sandbox Code Playgroud)

SVC:

<%@ ServiceHost Language="CS" Debug="true" Service="TestService.Test" CodeBehind="Test.svc.cs" %>
Run Code Online (Sandbox Code Playgroud)

svc.cs:

public class Test : ITest
{

public bool Connect(string password)
{
    return true;
}

}
Run Code Online (Sandbox Code Playgroud)

调用: 配置是以编程方式定义的,因为它是一个库

public sealed class Validator
{

    public static bool Connect(string password)
    {
        return ObtenirCLient().Connect(password);
    }

    private static LicensingService.LLMrqLicensingClient ObtenirCLient()
    {
        dynamic endpoint = new EndpointAddress("http://localhost/TestService/Test.svc");
        LicensingService.LLMrqLicensingClient client = new LicensingService.LLMrqLicensingClient(ObtenirBinding(), endpoint);

        client.Endpoint.Name = "LicHttp";
        client.Endpoint.Contract = new Description.ContractDescription("TestService.ITest");

        return client;
    }

    private static BasicHttpBinding ObtenirBinding()
    {
        return new BasicHttpBinding {
            Name = "LicHttp",
            Security = ObtenirSecurity()
        };
    }

    private static BasicHttpSecurity ObtenirSecurity()
    {
        return new BasicHttpSecurity {
            Mode = BasicHttpSecurityMode.TransportCredentialOnly,
            Transport = ObtenirTransport()
        };
    }

    private static HttpTransportSecurity ObtenirTransport()
    {
        return new HttpTransportSecurity { ClientCredentialType = HttpClientCredentialType.Windows };
    }

}
Run Code Online (Sandbox Code Playgroud)

如果您发现任何奇怪的内容,请告诉我们!

Lun*_*nyx 5

代替

client.Endpoint.Contract = new Description.ContractDescription("TestService.ITest");
Run Code Online (Sandbox Code Playgroud)

试试这个:

client.Endpoint.Contract = ContractDescription.GetContract(typeof(ITest));
Run Code Online (Sandbox Code Playgroud)