0

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

服务器是通过 WCF 服务实现的。在客户端,应通过通道工厂检索数据,而不是通过 .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 访问该服务。

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

错误:通信异常

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

用户等级:

[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;
}
4

0 回答 0