2011-06-28 5 views
2

私はWCFを学習しています。私はASP.NET MVC2 Webアプリケーションを持っています。アプリケーションからMIME形式の電子メールを送信したいので、将来の再利用などのために電子メール機能を別のWCFプロジェクトにカプセル化したいと思ったので、WCFサービスライブラリを追加しました。ソリューションは、メール機能をコード化し、Webプロジェクトにサービスリファレンスを追加しました。そして、VS内から実行するとすべて正常に動作します。ただし、ブラウザウィンドウから(Visual Studio 'F5'経由ではなく)Webアプリケーションにアクセスすると、WCFサービスは機能しません。次のようにWCFサービスライブラリはVisual Studioから実行される場合のみ動作します

Unable to connect to the remote server at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) at System.Net.HttpWebRequest.GetRequestStream() at System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream() No connection could be made because the target machine actively refused it 127.0.0.1:8732 at System.Net.Sockets.Socket.DoConnect

ウェブアプリで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> 

VS2010の外で作業するには?また、最終的に私たちのサーバーに展開する際には、どのような導入のヒントも高く評価されます。

ありがとうございました。

ありがとうございました。私はこれをWebにデプロイするつもりで、個別のWebアプリケーションまたはWebサービスを作成して、サービスライブラリを参照してから、独立したWebサーバーにデプロイする必要がありますか?

答えて

1

理由は、F5であなたのwcfサービスを実行すると、自動的にWcfSvcHost.exeがホストされます。しかし、localhostを介してWebページに直接アクセスすると(ホストされていないwcfサービスなしで)、このエラーが発生します。あなたがする必要があるのは、IIS(または他の場所)でwcfを最初にホストしてから、Webアプリケーションを使用することです。

Hereは、wcfサービスをホストするためのオプションです。

+0

これを解決するには、主なWebアプリケーションとは独立したWebサーバーに最終的に展開したい場合は、3番目のVSプロジェクト(Webサイトプロジェクト)を作成して(このソリューションに追加する) WCFサービスのホストですか? WCFサービスをパッケージ化するための最善の方法は何ですか。ローカルでも運用環境のWebサーバーでも実行できますか?ありがとう – DEH

+0

あなたは何を考えているのは正しいです。 2つの異なる仮想ディレクトリにWebサイトとwcfサービスの両方をパッケージ化することができます。しかし、WCFをホストするIISを選ぶことは、転送プロトコルを制限することを覚えておいてください。しかし、あなたのシナリオを考えれば、大したことではありません。 – Illuminati

3

ローカルマシンにサービスを展開した場合、サービスが実行されているポートのいずれかがファイアウォールによってブロックされているか、間違ったポートを探している可能性があります。サービスを展開するときに忘れないでください。ポートは、開発環境が使用したものと異なる場合があります。

また、さらに重要なことは、サービスをローカルマシンに実際に展開したかどうかです。開発環境(F5)を実行すると、サービスを実行するための小さなバージョンのIISが起動します。これは、開発環境外で実行しようとすると発生しません。 WCFサービスをどこかに配置する必要があります(テスト用のマシンか別のマシンか)。次に、どのポートがリッスンしているのかを知ることができ、環境を正しく接続できます。あなたの問題を引き起こしているそのステップをやっていないかもしれないように聞こえます。

http://www.dotnetspark.com/kb/1679-how-to-host-wcf-services-tutorial.aspx

1

WCFサービスライブラリは、WCFサービスクラス、契約などそれはサービスではないためだけのプロジェクトです:

はここでWCFサービスを展開する方法のための偉大なウォークスルーチュートリアルです。 Visual Studioからアプリケーションを実行すると、サービスが表示され、WcfSvcHost.exe(開発のヘルパーツール)でホストされますが、実際の実行の場合はyou must host the service yourselvesです。

関連する問題