Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF和IIS中的神秘问题?_C#_Wcf - Fatal编程技术网

C# WCF和IIS中的神秘问题?

C# WCF和IIS中的神秘问题?,c#,wcf,C#,Wcf,你好 我写了WCF双工服务。此服务在Visual studio中运行良好,但当我发布此服务并将其放在IIS上时,服务不响应任何客户端 所有客户端都正确连接到此服务。此外,他们对服务的要求很好,没有出现异常情况。 这些服务(IIS服务和VS托管服务)的唯一不同之处在于它们的地址。例如: *IIS服务地址是或更好地说是虚拟路径地址。 *VS托管服务地址为。 绝对我更改了客户端的服务器地址。 此处为服务/应用程序配置: VS托管服务 <system.serviceModel> <se

你好
我写了
WCF双工服务
。此服务在Visual studio中运行良好,但当我发布此服务并将其放在IIS上时,
服务不响应任何客户端

所有客户端都正确连接到此服务。此外,他们对服务的要求很好,没有出现异常情况。
这些服务(IIS服务和VS托管服务)的唯一不同之处在于它们的地址。例如:
*IIS服务地址是或更好地说是虚拟路径地址。
*VS托管服务地址为。 绝对
我更改了客户端的服务器地址。

此处为服务/应用程序配置:
VS托管服务

<system.serviceModel>
<services>
  <service name="SmsService.Business.SmsService"
           behaviorConfiguration="ServiceBehavior">
    <endpoint address="http://localhost:1408/SmsService.svc"
              binding="wsDualHttpBinding"
              contract="SmsService.Business.ISmsService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

IIS托管服务

    <system.serviceModel>
<services>
  <service name="SmsService.Business.SmsService"
           behaviorConfiguration="ServiceBehavior">
    <endpoint address=""
              binding="wsDualHttpBinding"
              contract="SmsService.Business.ISmsService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="ServiceBehavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

客户端配置

  <system.serviceModel>
<bindings>
  <wsDualHttpBinding>
    <binding name="WSDualHttpBinding_SMSService"
             closeTimeout="00:10:00"
             clientBaseAddress="http://MyMachinName:10300/SmsClientService"
             openTimeout="00:01:00" 
             receiveTimeout="00:10:00" 
             sendTimeout="00:10:00"
             bypassProxyOnLocal="false" 
             transactionFlow="false" 
             hostNameComparisonMode="StrongWildcard"
             maxBufferPoolSize="524288" 
             maxReceivedMessageSize="65536"
             messageEncoding="Text" 
             textEncoding="utf-8" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32"
                    maxStringContentLength="8192" 
                    maxArrayLength="16384"
                    maxBytesPerRead="4096" 
                    maxNameTableCharCount="16384" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00" />
      <security mode="Message">
        <message clientCredentialType="Windows" 
                 negotiateServiceCredential="true"
                 algorithmSuite="Default" />
      </security>
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint address="http://SERVER1/SmsService/SmsService.svc" 
            binding="wsDualHttpBinding"
            bindingConfiguration="WSDualHttpBinding_SMSService" 
            contract="ServiceReference.SMSService"
            name="WSDualHttpBinding_SMSService">
    <identity>
      <dns value="localhost" />
    </identity>
  </endpoint>
</client>

即使我在第一个服务方法中编写了事件日志,但这是行不通的

那么问题出在哪里?

编辑1 首先谢谢大家

其次,我想,我没有清楚地解释我的问题。“此服务在Visual studio中运行良好”指的是在VS中,我可以通过客户端与服务器通信(在VS with service中的同一解决方案上)。客户端可以调用服务,服务也可以调用客户端,工作正常(任何计算、回调、数据库操作等)

但是,当我发布在VS中能够正常工作的服务时,会将其发布到工作不正常的IIS中(即使是在我自己的计算机中)。这意味着
客户端可以创建服务对象并连接到该IIS托管服务
,但当客户端调用服务时,没有事件(计算、回调、数据库操作),并且
服务也不会调用客户端的


我不明白,如果我的代码中的任何一个步骤都有错误,那么这些错误一定是在VS的运行时发生的,所以一定是我错过的,比如
安全配置、客户端配置或其他什么

可能是防火墙阻止了端口1408

你能在浏览器中打开吗?如果没有,请检查您的IIS配置

首先,双工很糟糕(真的很糟糕),但我不会喋喋不休,因为你已经决定使用它了

我看到的主要问题是安全性。我相信windows事件日志会告诉您关于此的故事-只需检查安全日志上的错误即可。默认情况下,不允许IIS应用程序池与其他计算机通信。你没有提到你已经具体做了什么,所以我认为这都是默认的。只要将应用程序池的身份更改为管理员用户(al认为不推荐用于生产),我想你会看到你的问题消失——我只是猜测


主题外:为什么双工不好

  • 由于服务器试图建立回客户端的连接,这严重降低了服务的可伸缩性。事实上,如果客户端连接不好或。。。服务器的连接可能会一直挂在那里,直到超时为止,在此期间,专用于该调用的所有资源都将被锁定,从而造成浪费
  • 客户端计算机及其连接的规范可能会影响服务的性能
  • 对于服务器,通常确保它是可访问的。如果客户端位于防火墙或NAT后面,则无法与服务器联系。这实际上可能是你的问题
  • 因此,如果您为服务器打开客户机,这意味着客户机也可以向全世界公开。服务器的安全考虑通常是好的,但是客户端却被忽略了,所以现在需要考虑很多事情
  • 还有更多。。。但这应该足够了


你能成功浏览到服务发现页面吗?为什么你的clientbaseaddress和endpoint address在不同的主机上?@hero是的,我能看到服务@leppie因为我的平台是网络,我在服务器系统中运行服务,在我的机器上运行客户端。请看我的编辑:客户机是本地局域网上的机器,即公司防火墙内的机器,还是因特网上的旧客户机?服务无法连接的客户端位于何处?我的计算机上的IIS托管服务也是我的计算机上的客户端。即使我在其他计算机(同一域)上运行客户端,但结果是一样的。@Bhaiji您以前曾帮助过我(再次感谢),但这不是同一个问题。请参阅我的编辑您的客户端终结点是server1,而基址不匹配,请尝试更改它们。还要检查IIS日志以查看请求是否到达服务器。这是打印错误的,事实上它们是相同的。如何检查IIS日志它们是文本文件,位置将取决于您的配置,在我的框中它们位于c:\inetpub\logfiles的子目录中为什么不好?这个主意很棒。这意味着WCF duplex不是一个好工具吗?另外,事件查看器中没有安全日志。我将在今天晚些时候为您提供一些指示,说明为什么它不好。另一方面,请使用以下信息更新您的问题:IIS版本、.NET版本、IIS应用程序池标识、aspNetCompatibility=?,如果服务器和客户端都在这两台计算机上。我已经添加了双工不好的原因。@Ali如何使用双向通信。我应该将wsDualHttpBinding更改为Tcp绑定吗