一般的なハンドラーから呼び出される関連するクライアント側のコードは次のとおりです。
private static readonly IServiceClient Client = new Soap12ServiceClient("http://localhost/MyService/Send");
_serviceRequest = new ServiceRequest
{
String1 = "string1",
String2 = "string2",
String3 = "string3"
};
Client.Send<ServiceResponse>(_rawMessage);
サービス側では、web.config に次のものがあります。
<system.webServer>
<handlers>
<add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
</handlers>
</system.webServer>
そして、私の Global.asax.cs で次のようにします。
public class MyServiceAppHost : AppHostBase
{
public MyServiceAppHost() : base("My Service", typeof(MyService).Assembly) { }
public override void Configure(Container container)
{
Routes.Add<ServiceRequest>("/Send");
}
}
protected void Application_Start(object sender, EventArgs e)
{
new MyServiceAppHost().Init();
}
そして最後に、 MyService クラス:
public class MyService : IService<ServiceRequest>
{
public object Execute(ServiceRequest request)
{
return new ServiceResponse
{
Response = true
};
}
これが私のPOCOクラスです:
[DataContract]
public class ServiceRequest
{
[DataMember(Order = 1)]
public string String1 { get; set; }
[DataMember(Order = 2)]
public string String2 { get; set; }
[DataMember(Order = 3)]
public string String3 { get; set; }
}
[DataContract]
public class ServiceResponse
{
[DataMember(Order = 1)]
public bool Response { get; set; }
}
クライアントとサービスを同じ IIS サーバー (別のアプリ プール/Web サイト) と別のサーバーに配置しようとしました。
ブラウザ経由で URL にアクセスするhttp://localhost/MyService/Send
と、サービスが起動していることを示す適切な応答 (true) がブラウザに表示されます。しかし、クライアントから Soap12ServiceClient を使用すると、「リモート サーバーがエラーを返しました: (404) 見つかりません」というメッセージが表示されます。