3

一般的なハンドラーから呼び出される関連するクライアント側のコードは次のとおりです。

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) 見つかりません」というメッセージが表示されます。

4

1 に答える 1

2

SOAP はカスタム ルートを利用できず、同じエンドポイントへの HTTP POST SOAP メッセージのみをサポートします。そのため、すべてのサービスに対してベース URL を使用するようにのみ構成する必要があります。

于 2012-06-20T21:50:14.693 に答える