目前,我正在尝试实现服务器客户端程序。
此项目中使用的模型在共享程序集中定义,并使用属性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;
}