0

コンソールアプリケーション内でホストされている単純なWCFサービスを実行しようとしています。これが私が持っているコードです:

class Program
{
    static void Main(string[] args)
    {
        var serviceHost = new ServiceHost(
          typeof (MyService), new Uri("http://localhost:3000"));
        serviceHost.AddServiceEndpoint(
          typeof (IMyService), new WebHttpBinding(), "");

        serviceHost.Open();
        Console.ReadKey();
        serviceHost.Close();
    }
}

[ServiceContract]
public interface IMyService
{
    [WebGet]
    [OperationContract]
    string Hello(String s);
}

public class MyService : IMyService
{
    public string Hello(String s)
    {
        return "hello " + s;
    }
}

私が行くときhttp://localhost:3000、それは言います

サービス

これはWindows©CommunicationFoundationサービスです。

このサービスのメタデータ発行は現在無効になっています。

サービスにアクセスできる場合は、次の手順を実行してWebまたはアプリケーションの構成ファイルを変更することでメタデータ発行を有効にできます。

[ここにもっとテキスト]

次に、に行くとhttp://localhost:3000/Hello?s=John、次のように表示されます。

EndpointDispatcherでのAddressFilterの不一致が原因で、To'http:// localhost:3000 / Hello?s=John'のメッセージを受信者で処理できません。送信者と受信者のEndpointAddressesが一致していることを確認します。

私はそれを間違っているのだろうかと思っています。ターゲットプラットフォームは.NET4です。私にはありませんapp.config

アドバイスをいただければ幸いです。

4

2 に答える 2

1

.NET 4以降では、ベースアドレスを定義すると、WCFがデフォルトのエンドポイントを生成します。言い換えれば、次のことを実行してください。

var serviceHost = new ServiceHost(
      typeof (MyService), new Uri("http://localhost:3000")); 
serviceHost.Open(); 

開発者向けWindowsCommunicationFoundation4の概要のデフォルトのエンドポイントのセクションをお読みください

于 2012-08-05T03:12:01.370 に答える
0

このように修正:

var serviceHost = new ServiceHost(
  typeof(MyService), new Uri("http://localhost:3000"));
var serviceContractDescription = ContractDescription.GetContract(
  typeof (IMyService));
var serviceEndpoint = new WebHttpEndpoint(
  serviceContractDescription, new EndpointAddress("http://localhost:3000"));
serviceHost.AddServiceEndpoint(serviceEndpoint);

現在動作しています。

于 2012-08-04T17:37:20.690 に答える