0

WCFWebサービスは初めてです。単純なHelloWorldWebサービスをテストしようとしています。今のところ、私はセルフホスティングを行っています。ホストアプリケーションを起動し、ブラウザを開いて、リソースのアドレスを入力したところです。また、Fiddlerを実行し、Composerを使用してリクエストを作成しました。どちらの場合も、「サービスを作成しました」というメッセージが表示されます。私の.wsdlへのリンクがあるページ。

応答に「HelloWorld」というテキストが表示されるか、「...Helloworld」が含まれるWebページが表示されることを期待していました。

私は何が欠けていますか?それとも私はプロセスを誤解していますか?

App.Config

<?xml version="1.0"?>
<configuration>

    <system.serviceModel>
      <services>
         <service name="My.Core.Services.GreetingService" behaviorConfiguration="MyServiceTypeBehaviors">
            <host>
               <baseAddresses>
                 <add baseAddress="http://localhost:8080/greeting"/>
               </baseAddresses>
            </host>
            <endpoint name="GreetingService" binding="webHttpBinding" contract="My.Core.Services.IGreetingService"/>
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
       </service>
    </services>

    <behaviors>
       <serviceBehaviors>
            <behavior name="MyServiceTypeBehaviors" >
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
       </serviceBehaviors>
    </behaviors>
   </system.serviceModel>

<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

ホストコード

using System;
using System.ServiceModel;
using My.Core.Services;    

namespace My.Service.Host
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var host = new ServiceHost(typeof(GreetingService)))
            {
                host.Open();
                Console.WriteLine("The service is ready.");
                Console.WriteLine("Press <ENTER> to terminate service.");
                Console.WriteLine();
                Console.ReadLine();
                host.Close();
            }
        }
}

}

HelloWorldの契約とサービス

using System.ServiceModel;
using System.ServiceModel.Web;

namespace My.Core.Services
{
   [ServiceContract]
   public interface IGreetingService
   {
      [OperationContract]
      [WebGet(UriTemplate = "/")]
      string GetGreeting();
   }
}

using System.Collections.Generic;

namespace My.Core.Services
{
    public class GreetingService : IGreetingService
    {
        public string GetGreeting()
        {
             return "Greeting...Hello World";
        }
    }
}
4

2 に答える 2

1

私が正しく理解している場合は、次の URL に wsdl リンクが表示されます。

http://localhost:8080/greeting

エンドポイントを呼び出すには、次のように URL に追加する必要があります

http://localhost:8080/greeting/GetGreeting/

UriTemplate がそこにある理由は完全にはわかりませんが、おそらく例からコピーして貼り付けただけだと推測しています。定義したい特定のクエリ文字列パラメーターがない限り、実際には必要なく、複雑になる傾向があるため、削除することをお勧めします。つまり、インターフェイスは次のようになります...

[ServiceContract]
public interface IGreetingService
{
   [OperationContract]
   [WebGet]
   string GetGreeting();
}

...そして、URL の最後の「/」を失う可能性があります。

于 2012-08-14T23:50:39.100 に答える
0

私は問題を理解します。URL「http://localhost:8080/greeting」を使用すると、サーバーは一時ページを送信します。URL の末尾にバックスラッシュ「/」を追加すると、サービスが実行されます。そのため、「http://localhost:8080/greeting/」が機能し、「...Hello World」が返されます。

于 2012-08-15T15:12:40.977 に答える