2012-03-27 22 views
0

私はブログ記事Using a REST WCF Serviceに従っています。WCFをRESTfulとして公開する

しかし、私はGlobal.asaxページがどこにあるのかわかりません。ブログからそのビットを追加することは重要ですか?私は以下のコードで私のWindows Formsアプリケーションから接続しようとすると

はまた:

private void button1_Click(object sender, EventArgs e) 
{ 
    using (ChannelFactory<ServiceReference1.IService1> factory = new 
     ChannelFactory<ServiceReference1.IService1>(
      new WebHttpBinding(), 
      "http://localhost:8000/Hello")) 
      { 
       factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
       var helloService = factory.CreateChannel(); 
       label1.Text = helloService.GetData(Convert.ToString(textBox1.Text)); 
       // The above line 
      } 
} 

私はこのエラーを取得する:

Could not connect to http://localhost:8000/Hello/GetData. TCP error 
code 10061: No connection could be made because the target machine 
actively refused it 127.0.0.1:8000. 

である私の他のプロジェクトから私のWeb.Configファイルホストは次のようになります。

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <services> 
     <service name="WcfService2.Service1" behaviorConfiguration="WcfService2.Service1Behavior"> 
     <!-- Service Endpoints --> 
     <endpoint address="http://localhost:29174/Service1.svc" binding="webHttpBinding" contract="WcfService2.IService1"> 
      <identity> 
      <dns value="localhost"/> 
      </identity> 
     </endpoint> 
     <!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>--> 
     </service> 
    </services> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="webBehavior"> 
      <webHttp /> 
     </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
     <behavior name="WcfService2.Service1Behavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

これは私が無効にしたホストその後、私は私の設定ファイルにその部分をコメントアウトしようと試み

This service requires ASP.NET compatibility and must be hosted in IIS. Either host the service in IIS with ASP.NET compatibility turned on in web.config or set the AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode property to a value other than Required.

しかし:私はこれを実行しようとすると、私はこのエラーがブログと私のweb.configファイルに関連する取得

namespace Host 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      WebHttpBinding binding = new WebHttpBinding(); 
      WebServiceHost host = 
      new WebServiceHost(typeof(Service1)); 
      host.AddServiceEndpoint(typeof(IService1), 
      binding, 
      "http://localhost:8000/Hello"); 

      host.Open(); // this line gives an error 
      Console.WriteLine("Hello world service"); 
      Console.WriteLine("Press <RETURN> to end service"); 
      Console.ReadLine(); 
     } 
    } 
} 

を:一人でwcfserviceを走りましたそれは動かないでしょう。これは、私がWindows Formsアプリケーションに接続できない理由を説明します。

注しかし、私のweb.configファイルとAspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode以下のコードの両方が設定されています

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class Service1 : IService1 
{ 
    public string GetData(string value) 
    { 
     return string.Format("You entered: {0}", value); 
    } 
} 
+0

global.asax maybe?アプリケーションの場合はA、コントロールの場合はC –

+2

そして8000!= 29174、あなたの郵便配達員にお尋ねください。 –

+0

はいGlobal.asaxは、2番目のコメントが何を意味するのかわかりません。 –

答えて

2

あなたが見ている例は、IISでホストされているASP.NET Webアプリケーションを作成していることを前提としています。このファイルにはGlobal.asaxというファイルがあります。

コンソールアプリケーションでこのファイルをホストしているため、このファイルはありません。


また、お使いの設定であなたが持っている:

<endpoint address="http://localhost:29174/Service1.svc" 

が、あなたのコード内で

、非常に異なっている

"http://localhost:8000/Hello" 


アプリケーションの状態をコンソールあなたの起動時に表示されるエラー:

This service requires ASP.NET compatibility and must be hosted in IIS. Either host the service in IIS with ASP.NET compatibility turned on in web.config or set the AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode property to a value other than Required.

しかし、あなたのコードは、プロパティが必要に設定していることがあります。コンソールアプリケーションはASP.NET互換モードを提供できません。IISなどの実際のWebサーバーまたはCassiniまたはIIS Expressしか提供できません。したがって、に設定されているとエラーが発生します。必要なのはです。エラーメッセージに示されているように、以外の別の値に設定してください。必要なメッセージはです。ただし、ASP.NET互換モードがないと、他の機能が正しく動作しないことがあります。行うには


最善のことは、あなたが実際にコンソールアプリケーションまたはとして実行する必要があります実際のプロジェクトを作ることを計画していない限り、ASP.NET Webアプリケーションとして、ここであなたの仕事を再実行することであろうWindows service

2

Global.asaxのページが.NETウェブサイト上で発見されたページです。それはウェブページのブートストラップのようなものです。 Webページが最初にスピンアップすると、すべての起動アクションが実行されます(この場合、サービスURLをルートとして配線しますが、そのルートを個人的に使用したことがないため、詳細はわかりません)。

エラーについては、ご使用の構成からのものである可能性があります。それはlocalhost:29174を指しているようですが、あなたのエラーはlocalhost:8000から来ています。それがあなたの問題かどうかはわかりません。しかし、ファイアウォールをオフにして、ファイアウォールがコールをブロックする可能性があるため、何が起こるかを確認することもできます。

+0

コードをスクロールして、ローカルホストを設定しました。サービスは29174でホストされています –

+0

@Garrith Ahh、あなたが手動でURLに行く場合、それは動作しますか? –

+0

もう一度私は質問を更新する必要があります、私はコンソールアプリケーションからホストしていた最後の時間を参照してくださいしかし、それ自体がエラーを与える!だから私はちょうどそれなしでwcfserviceを走らせた。 –

関連する問題