WCF自ホストサービス-端点のC#
-
25-09-2019 - |
質問
私の最初の数の試みを自主催のサービスです。うものをつくり上げるまでクエリー文字列を返し一部のテキストがいない問題
すべての文書話端て自動的に作成された各拠点の住所が見つからない場合、それらは、configファイルです。このように見えませんのだから、帰れなかった私にとっての"サービスがゼロの応用端..."。手動で設定する基盤の評価項目として以下のように解決す:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; namespace TestService { [ServiceContract] public interface IHelloWorldService { [OperationContract] string SayHello(string name); } public class HelloWorldService : IHelloWorldService { public string SayHello(string name) { return string.Format("Hello, {0}", name); } } class Program { static void Main(string[] args) { string baseaddr = "http://localhost:8080/HelloWorldService/"; Uri baseAddress = new Uri(baseaddr); // Create the ServiceHost. using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) { // Enable metadata publishing. ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; host.Description.Behaviors.Add(smb); host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr); host.AddServiceEndpoint(typeof(IHelloWorldService), new BasicHttpBinding(), baseaddr + "SayHello"); //for some reason a default endpoint does not get created here host.Open(); Console.WriteLine("The service is ready at {0}", baseAddress); Console.WriteLine("Press <Enter> to stop the service."); Console.ReadLine(); // Close the ServiceHost. host.Close(); } } } }
方法を教えてくださいく設定する値を返しの名SayHello(string name)名前で要求した場合thusly:localhost:8080/HelloWorldService/SayHello?名前=カイル
って徒歩走り、、こっそうクロー...
解決
デフォルトのエンドポイントが追加されないことに関する質問については、次のとおりです。
- まず第一に、これは WCF 4 の機能です。.NET 4 でのみ動作します。
- 次に、デフォルトのエンドポイントは、config で明示的なエンドポイントが定義されていない場合、および次の場合にのみサービス ホストに追加されます。 コード内にエンドポイントを自分で追加しないでください!これら 2 つのエンドポイントをコードに追加すると、ユーザーが主導権を握ることになり、WCF 4 ランタイムが構成をいじることがなくなります。
詳細については、この MSDN ライブラリの記事を参照してください。 開発者向けの WCF 4 の新機能. 。とりわけ、デフォルトのエンドポイントの使用方法を示しています。基本的にはサービスのベース アドレスを定義し、ServiceHost を開くだけです。これですべてです。
string baseaddr = "http://localhost:8080/HelloWorldService/";
Uri baseAddress = new Uri(baseaddr);
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
//for some reason a default endpoint does not get created here
host.Open();
// here, you should now have one endpoint for each contract and binding
}
必要に応じて、コード内でデフォルトのエンドポイントを明示的に追加することもできます。したがって、独自のエンドポイントを追加する必要があるが、システムのデフォルトのエンドポイントも追加したい場合は、以下を使用できます。
// define and add your own endpoints here
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
// add all the system default endpoints to your host
host.AddDefaultEndpoints();
//for some reason a default endpoint does not get created here
host.Open();
// here, you should now have your own endpoints, plus
// one endpoint for each contract and binding
}
私も このブログ投稿をここで見つけました 非常に啓発的です。Christopher のブログには、優れた非常に役立つ WCF の投稿が満載です。強くお勧めします。
他のヒント
IISは、Webサービスをホストする場合は、あなたが友好を得る他に何も間違っていないと仮定すると、ページ「あなたは、Webサービスを作成しました」。あなたは彼らが高速移動し、多くのことを説明し、Bustamenteの学習WCFの本で見つけることができるよう、いくつかの簡単なWCFのチュートリアルをしようとする場合があります。
EDIT:ここでのショー片道のMSDNページですあなたの要求されたサービスコール、素敵な一例のオフクエリ文字列パラメータを取得します。これは、[のWebGet]属性を使用することを示しています。あなたはそれを使用したくなかった場合は、を使用して試みることができますOperationContext の着信要求の内部で取得します。