我有一个简单的Web服务正在运行,我有一个控制台应用程序客户端正在使用该服务。我确实遇到了这个问题,我得到了社区中一些优秀人才的帮助。
我还有另一个问题:如果我想在循环中从客户端调用服务,它就不起作用了。它只是第一次工作,然后它一直在等待。为什么会发生这种情况,我该如何解决呢。
代码:
namespace WebService
{
[ServiceContract]
public interface IService
{
[OperationContract(Name="Result")]
[WebGet(UriTemplate = "/")]
Stream Result();
}
public class Service:IService
{
public Stream Result()
{
// read a file from the server and return it as stream
}
}
}
The client:
namespace WebServiceClient
{
[ServiceContract]
public interface IService
{
[OperationContract(Name="Result")]
[WebGet(UriTemplate = "/")]
Stream Result();
}
}
static void Main()
{
Console.WriteLine("Press enter when the service is available");
Console.ReadLine();
// creating factory
HttpChunkingBinding binding = new HttpChunkingBinding();
binding.MaxReceivedMessageSize = 0x7fffffffL;
ChannelFactory<WebServiceClient.IService> factory = new ChannelFactory<WebServiceClient.IService>
(binding, new EndpointAddress("http://localhost/WebService/Service"));
WebServiceClient.IService service = factory.CreateChannel();
for(int i = 0; i < 10; i++)
{
Stream s = service.Result();
// write this stream to a file and close the stream
}
//Closing our channel.
((IClientChannel)service).Close();
}
谢谢,
答案 0 :(得分:1)
只是一个猜测,但听起来它与您关闭服务的连接没有关闭...尝试以下内容:
for(int i = 0; i < 10; i++)
{
ChannelFactory<WebServiceClient.IService> factory =
new ChannelFactory<WebServiceClient.IService>(
binding,
new EndpointAddress("http://localhost/WebService/Service"));
WebServiceClient.IService service = factory.CreateChannel();
using(service as IDsposable)
{
using(MemoryStream s = service.Result() as MemoryStream)
{
// write this stream to a file
}
}
}
答案 1 :(得分:0)
你还没有发布代码,所以我会猜测:
您将最大打开连接数设置为1,并且正在循环中打开与Web服务的连接,但不会将该连接作为循环的一部分关闭。这会产生第二次迭代等待第一次连接超时的情况(可能设置为10分钟)。
答案 2 :(得分:0)