2009-11-10 55 views
0

我想让IIS6与我在同一台机器上单独的Windows服务应用程序中托管的WCF服务一起可靠地工作。用户通过一些可以正常工作的HTTP公开服务连接到IIS,然后IIS需要从Windows服务获取一些信息以放入HTTP响应中。我还需要Windows Service和IIS之间的回调通道。任何人都可以IIS作为一个WCF客户端可靠地工作

经过大量的努力,我得到它与netTcpBinding一起工作,一切都会玫瑰花了5或10分钟,但之后,IIS会报告WCF通道为故障,然后捣碎并停止处理任何请求,直到工人过程得到回收,整个事情重演。

我一直在试图交换到netNamedPipeBinding,但是IIS拒绝或被拒绝访问管道,“没有在net.pipe:// localhost/mypipename监听的端点”错误。我可以从控制台应用程序连接到管道。

所以我的问题是有人得到这两个绑定与IIS作为客户端或有任何其他方法?

回答

2

我们使用IIS 7托管约20个服务与net.tcp和net.pipe绑定,它工作正常。

您的管道问题看起来像我的配置错误。如果有帮助,这是我们如何让他们配置:

服务器:

<endpoint address ="" binding="fooBinding" 
      contract="Bla.IBlaAPI" 
      bindingConfiguration="BlaAPI.BindingConfig"> 

绑定配置:

<binding name="BlaAPI.BindingConfig" 
       receiveTimeout = "10:50:00" 
       sendTimeout = "10:50:00" 
       maxReceivedMessageSize="2147483647" 
       maxBufferSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       transactionFlow="false"> 
      <readerQuotas maxDepth="32" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="8192" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None"/> 
</binding> 

注意,我们使用的是长超时和具有非常高消息大小等配额,因为我们通过此服务传递一些大块数据。您可以根据自己的需要进行调整。我们将安全性设置为“无”,因为该服务只能从本地安全机器联系。同样,你的里程可能会有所不同

客户:

<endpoint name="Bla.Bindings.BlaAPI" address="net.pipe://localhost/bla/IBlaAPI.svc" 
       behaviorConfiguration="BlaAPI.ServiceBehavior" 
       binding="netNamedPipeBinding" bindingConfiguration="BlaAPI.BindingConfig" 
       contract="Bla.IBlaAPI" /> 

关于故障状态问题,请注意,如果该服务代码的执行过程中发生未处理的异常时,服务实例将保持在故障状态,直到它被正确关闭。为避免出现这种情况,请处理服务顶级的异常或使用(例如,Enterprise Library Excexption Handling块)。

+0

你可以发布你的绑定配置节点吗?你的命名管道也必须做任何有关权限或身份的事情吗? – sipwiz 2009-11-10 12:42:11

+0

完成后,添加了我们的绑定配置。关于安全性,我们使用“无”,因为所有访问都是本地的。 – 2009-11-10 12:49:44

+0

看起来像我netNamedPipeBinding的问题是Vista和/或IIS7之一。即使尝试完全相同的配置,它也不适用于我的Vista开发PC,但在我的Win2k3/IIS6服务器上运行良好。 – sipwiz 2009-11-10 13:38:07

0

你能告诉我你用来处置wcf客户端代理的代码吗?

切勿在wcf代理上使用'使用',因为它不会每次都正确处理。这可能会导致故障状态。

+0

这似乎确实吸引了很多人:)。这不是我的问题,但我正在调整我的错误处理,看看我能不能改善它,开始试图缩小他们突然出现的问题。 – sipwiz 2009-11-10 12:43:56

1

重新NetNamedPipeBinding和 “没有终点在听net.pipe://本地主机/ mypipename”

是您的Web应用程序冒充其用户?如果您尝试通过命名管道绑定访问WCF服务,则会出现上述错误,该安全上下文的登录令牌具有NETWORK USERS的成员身份。当WCF客户端通道栈尝试读取服务创建的共享内存对象以发布使用中的管道名称时,它不会区分访问被拒绝的错误和“未找到”错误。(请参阅http://blogs.charteris.com/blogs/chrisdi/archive/2008/05.aspx等)

IIS应用程序中的模拟令牌总是具有NETWORK USERS成员身份。

相关问题