MiniCalcService
オペレーションが1つしかない単純なWCFサービスに取り組んでいますAdd
。クライアントとホストはどちらもコンソールアプリケーションです。クライアントアプリケーションは、各操作に必要なオペランドを受け取り、それらをサービスに渡します。このサービスは、クライアントコンソールに表示される結果を返します。
- ホストが実行されています
- 私はこれまですべてをコードで行っており、app.configはありません。
- 渡される大きなデータはなく、2つまたは3つの数値だけが渡されます
これは昨日私のために働いた。今日、同じことを試したところ、次の例外がスローされます。
メッセージを受け入れることができるhttp:// localhost:8091/MiniCalcServiceをリッスンしているエンドポイントはありませんでした。
これがスタックトレースです。重要なことではありませんがMiniCalcClient
、Visual StudioでMiniCalcService
開発MiniCalcHost
され、SharpDevelopで開発されています。
MiniCalcHost:
using(ServiceHost host = new ServiceHost(typeof(MiniCalcService.Service), new Uri("http://localhost:8091/MiniCalcService")))
{
host.AddServiceEndpoint(typeof(MiniCalcService.IService),new BasicHttpBinding(),"Service");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);
host.Open();
Console.WriteLine("Serving MiniCalcService since {0}", DateTime.Now);
Console.Write("Press ENTER key to terminate the MiniCalcHost . . . ");
Console.ReadKey(true);
}
MiniCalcClient:
static string Calculator(string operation, params string[] strOperands)
{
EndpointAddress ep = new EndpointAddress("http://localhost:8091/MiniCalcService");
IService proxy = ChannelFactory<IService>.CreateChannel(new BasicHttpBinding(), ep);
int[] operands;
string result = string.Empty;
try { operands = Array.ConvertAll(strOperands, int.Parse); }
catch (ArgumentException) { throw; }
switch (operation)
{
case "add":
result = Convert.ToString(proxy.Add(operands));//<---EXCEPTION
break;
default:
Console.WriteLine("Why was this reachable again?");
break;
}
return result;
}
サービス契約IService:
[ServiceContract(Namespace="learning.wcf.MiniCalc")]
public interface IService
{
[OperationContract]
double Add(params int[] operands);
}
この例外の原因を特定するのを手伝ってもらえますか?
解決策:この行を変更しました:
EndpointAddress ep = new EndpointAddress("http://localhost:8091/MiniCalcService");
これに:
EndpointAddress ep = new EndpointAddress("http://localhost:8091/MiniCalcService/Service");
そしてそれはうまくいった。