C#Channelfactory无法从WCF服务检索模型对象

时间:2016-01-22 10:56:19

标签: c# wcf channelfactory communicationexception

目前,我正在尝试实现服务器客户端程序。 此项目中使用的模型在共享程序集中定义,并使用属性DataContract标记。服务器应该使用它们以及客户端,因此不需要两次生成代码。当客户端向服务器发起请求时,它应该返回共享模型的实例,以确保它可以使用方法和构造函数以及数据。

服务器使用WCF服务实现。在客户端,应通过channelfactory检索数据,而不是通过.wsdl文件检索。

客户方:

    private void TestSzenarioOne()
    {
        var address = new EndpointAddress($"http://{Host}:{Port1}/{ServiceName}");
        var binding = new BasicHttpBinding();
        var factory = new ChannelFactory<ITestInterface>(binding, address);
        var channel = factory.CreateChannel();
        var test1 = channel.DoStringTest(); // <-- works fine
        var test2 = channel.DoStringEnumerableTest(); // <-- works fine
        var test3 = channel.DoTest(); // <-- want to get List<User> error!!!! 
    }

服务合同共享库:

[ServiceContract]
public interface ITestInterface: IDisposable
{
    [OperationContract]
    IEnumerable<User> DoTest();

    [OperationContract]
    string DoStringTest();

    [OperationContract]
    IEnumerable<User> DoStringEnumerableTest();

来自WCF服务的连接已打开,我可以通过url访问该服务。

为什么我无法从服务器获取模型对象?任何想法:

错误:CommunicationException

收到http:// localhost:1800 / testService服务的HTTP响应时出错。原因可能是服务端点绑定不使用HTTP协议。另一个可能的原因是HTTP请求上下文被服务器中止(可能是由于服务的关闭)。可以在服务器日志中找到更多信息。 &#34;

用户类:

[KnownType(typeof(Entity))]
[DataContract]
public class User : Entity
{
    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string ShortName { get; set; }

    [DataMember]
    public string Password { get; set; }
}

实体:

[DataContract]
public class Entity
{
    [DataMember]
    public long Id { get; } = 0;
}

0 个答案:

没有答案