我对WCF很近,并试图找出完成我的要求的最佳方法。 我有一个托管WCF服务的应用程序,代码如下:
Uri u1 = new
Uri("http://localhost:8732/Client1/WcfServiceLibrary1/Service1/"); Uri
u2 = new
Uri("http://localhost:8732/Client1/WcfServiceLibrary1/Service1/mex");
WSHttpBinding binding = new WSHttpBinding();
sHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1), u1);
ServiceMetadataBehavior meta = new ServiceMetadataBehavior();
meta.HttpGetEnabled = true;
sHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IService1), binding, u1);
sHost.Description.Behaviors.Add(meta); sHost.Open();
我可以在客户端应用程序上创建服务引用,并且在此服务上调用方法没有问题。使用下面的代码。
remoteService.Service1Client client = new remoteService.Service1Client();
remote.Text = client.GetData(3);
我也可以调用没有服务引用的方法。
EndpointAddress myEndpoint = new EndpointAddress("http://localhost:8732/Client1/WcfServiceLibrary1/Service1/");
WSHttpBinding myBinding = new WSHttpBinding();
ChannelFactory<IService1> ServiceConnectionFactory = new ChannelFactory<IService1>(myBinding, myEndpoint);
IService1 serviceConnection = ServiceConnectionFactory.CreateChannel();
如果我尝试在主机应用程序中执行相同的代码,则会收到以下错误。
请求频道在等待回复后超时 00:01:00。增加传递给Request或者调用的超时值 增加Binding上的SendTimeout值。分配给的时间 此操作可能是较长超时的一部分。
应用程序如何使用和使用当前托管的WCF服务?我是否需要在自己的线程中打开服务?
主意是在客户端连接之前触发一些初始化。