【问题标题】:I Cannot deploy my WCF service on IIS using WSHttpBinding我无法使用 WSHttpBinding 在 IIS 上部署我的 WCF 服务
【发布时间】:2015-11-11 19:49:21
【问题描述】:

我真的需要帮助。 我正在尝试第一次部署过去一个月一直在开发的 .NET WCF 应用程序。

我使用 IIS 7 作为我的 WCF 主机,并使用 wsHTTPBinding,因为我需要使用 Session 对象来存储凭据。我的客户是一个 WPF 应用程序,它使用 MVVM 模式和 Caliburn.Micro。

到目前为止,我设法(我认为)成功地在 IIS 上创建了服务。 如果我浏览 "http://localhost/Ohmio/OhmioService.svc",我会看到“您创建服务”消息。但是当我运行我的客户端并尝试连接到它时,我的应用程序关闭并出现错误“应用程序已停止工作......”bla bla bla。

这是我的服务器 Web.Config:

<?xml version="1.0"?>
<configuration>
  <appSettings/>
    <system.web>
    <compilation targetFramework="4.0"/>    
    <authentication mode="Windows"/>    
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
  </system.web>
  <system.webServer>    
    <directoryBrowse enabled="true"/>
  </system.webServer>
  <system.serviceModel>
    <bindings>
      <wsHttpBinding>      
        <binding name="myBinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">         
          <readerQuotas maxDepth="200" maxStringContentLength="8388608" maxArrayLength="16384" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" />
      <security mode="None" />
      <reliableSession enabled="true" />
        </binding>
      </wsHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="WcfService1.Service1Behavior" name="WcfService1.OhmioSVC">    
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="myBinding" contract="WcfService1.IOhmioSVC" >          
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfService1.Service1Behavior">          
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

这是客户端 App.Config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_IOhmioSVC" maxReceivedMessageSize="20000000"/>
        <security mode="None" />
            <reliableSession enabled="true" />
            </wsHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://localhost/Ohmio/OhmioService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IOhmioSVC" contract="OhmioSVC.IOhmioSVC" name="WSHttpBinding_IOhmioSVC">
                <identity>
                    <dns value="localhost"/>
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

当然,我的应用程序在我的开发机器上运行良好。 请帮忙!我什至不知道从哪里开始寻找原因。

谢谢!

编辑

好的。我按照建议放置了 Try catch 并且错误发生了:

例外:由于与远程端点的安全协商,无法打开安全通道。

内部异常:

这个端点不承认这个动作......并且只处理 WSReliableMessaging

【问题讨论】:

  • 您需要在客户端尝试连接到服务的位置进行尝试/捕捉,然后在您的问题中包含异常信息,包括任何内部异常。
  • 谢谢!请看我的更新!
  • 是的。编辑帖子后立即找到它。从服务器 Web.config 中删除 。现在我只得到关于 WSReliableMessaging 的错误。

标签: c# wcf iis deployment


【解决方案1】:

我相信这是这个的副本:

How to configure WCF Service with wsHttpBinding hosted on IIS and consumable over Web?

但我没有这样标记它的声誉。

【讨论】:

  • 感谢您的建议。已经尝试了其他答案的建议。我不认为是同样的问题。您提到的帖子是关于从网络外部连接到 Web 服务器的。我没有到达那里!我只是想在同一台机器上运行服务器和客户端!
【解决方案2】:

我认为问题与可靠会话有关(不是 100% 肯定,但我的神经告诉我)。我发现了一些关于可靠会话的implementation 可能对您有所帮助的文章。

希望这对你有帮助:)

【讨论】:

  • 感谢您的帮助。问题肯定是ReliableSession,以及“PerSession”的概念。我摆脱了错误,但是当我调用我的 Web 服务的两个方法时,变量中的先前值会丢失。我认为 IIS 无法识别这两个服务调用来自同一个客户端
  • 我脑海中唯一闪过的想法是重写我的代码来创建自己的会话。也就是说,当客户端调用“登录”方法时,服务器会创建一个 SessionID 或 AccesTicket,将其保存在数据库中并返回给客户端。在下一个方法调用中,客户端需要指定一个有效的 SessionID,服务器会针对数据库进行验证。如果有效则返回数据,否则抛出异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-01
  • 2011-03-21
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
相关资源
最近更新 更多