Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.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服务库仅在从Visual Studio运行时有效_C#_Visual Studio_Wcf_Web Applications - Fatal编程技术网

C# WCF服务库仅在从Visual Studio运行时有效

C# WCF服务库仅在从Visual Studio运行时有效,c#,visual-studio,wcf,web-applications,C#,Visual Studio,Wcf,Web Applications,我正在学习WCF。我有一个ASP.NET MVC2 web应用程序,我想从该应用程序发送mime格式的电子邮件,因此我想将电子邮件功能封装在一个单独的WCF项目中,以便将来重用。因此,我在解决方案中添加了一个WCF服务库,对电子邮件功能进行了编码,为web项目添加了一个服务引用,当从VS内部运行时,一切正常。但是,如果我从浏览器窗口(而不是通过Visual Studio“F5”)访问web应用程序,则WCF服务不起作用。我得到以下错误: 无法连接到远程服务器 在 System.Net.HttpW

我正在学习WCF。我有一个ASP.NET MVC2 web应用程序,我想从该应用程序发送mime格式的电子邮件,因此我想将电子邮件功能封装在一个单独的WCF项目中,以便将来重用。因此,我在解决方案中添加了一个WCF服务库,对电子邮件功能进行了编码,为web项目添加了一个服务引用,当从VS内部运行时,一切正常。但是,如果我从浏览器窗口(而不是通过Visual Studio“F5”)访问web应用程序,则WCF服务不起作用。我得到以下错误:

无法连接到远程服务器 在 System.Net.HttpWebRequest.GetRequestStream(TransportContext& (上下文)在 System.Net.HttpWebRequest.GetRequestStream() 在 System.ServiceModel.Channel.HttpOutput.WebRequestHttpOutput.GetOutputStream() 无法建立连接,因为 目标机器主动拒绝了它 127.0.0.1:8732 at System.Net.Sockets.Socket.DoConnect

web应用程序中的web.config文件(由WCF)修改如下:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IEmailService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8732/Design_Time_Addresses/Email/EmailService/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IEmailService"
        contract="EmailServiceReference.IEmailService" name="WSHttpBinding_IEmailService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

我需要做什么才能让app+服务在VS2010之外工作?另外,当我最终部署到我们的服务器时,我将非常感谢任何部署技巧

谢谢

编辑
谢谢你的回答。考虑到我将在web上部署它,我是否应该创建一个单独的web应用程序或web服务,然后引用服务库,并在适当的时候将其部署到一个独立的web服务器?

如果您将服务部署到本地机器,很可能是运行服务的端口被防火墙阻止,或者您正在查看错误的端口。不要忘记,在部署服务时,端口可能与开发环境使用的端口不同

另外,也许更重要的是,您是否真的将服务部署到了本地机器上?当开发环境运行(F5)时,它会启动一个小版本的IIS来运行您的服务。当您尝试在dev环境之外运行它时,不会发生这种情况。您需要在某处部署WCF服务(您的测试机器或其他机器)。然后,您将知道它正在侦听哪个端口,并且可以正确地连接您的环境。听起来你可能没有完成这一步,而这正是你的问题所在

以下是有关如何部署WCF服务的精彩演练教程:


WCF服务库只是用于WCF服务类、合同等的项目。它不是服务。当您从visual studio运行应用程序时,它将看到服务并将其托管在WcfSvcHost.exe(用于开发的帮助工具)中,但在实际运行时。

原因是当您使用F5运行时,您的wcf服务将自动托管在WcfSvcHost.exe中。但是当通过localhost直接访问网页时(没有havignwcf服务托管),您会得到这个错误。您需要做的是首先在IIS(或其他任何地方)中托管wcf,然后使用web应用程序


是托管wcf服务的选项

为了解决这个问题,并且考虑到我最终想要部署到一个独立于主web应用程序的web服务器,我是否应该创建第三个VS项目(一个web站点项目)(并添加到此解决方案),作为WCF服务的主机?打包WCF服务以便在本地和生产web服务器上运行的最佳方法是什么?谢谢你的想法是正确的。您可以将网站和wcf服务打包到两个不同的虚拟目录中。但是请记住,选择IIS托管WCF会限制传输协议。但是考虑到您的场景,这应该不是什么大问题。