2

特定のデータ セットをデータベースに入力する WCF Web サービスを作成しようとしており、Windows Phone 7 で使用できます。構成ファイルには、json と soap の 2 つのエンドポイントがあります。両方のコードは次のとおりです。

<service name="LiveAndesWCF.SightingServiceRest" behaviorConfiguration="MetadataBehavior">
    <endpoint address="soap" binding="basicHttpBinding" contract="LiveAndesWCF.ISightingServiceRest"/>
    <endpoint address="json" behaviorConfiguration="WebBehavior" binding="webHttpBinding" contract="LiveAndesWCF.ISightingServiceRest"/>
</service>
...
<bindings>
    <basicHttpBinding>
        <binding maxReceivedMessageSize="99999999" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:02:00">
            <readerQuotas maxArrayLength="76384000" maxStringContentLength="2147483647"/>
        </binding>
    </basicHttpBinding>
        <webHttpBinding>
            <binding maxReceivedMessageSize="99999999" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:02:00">
                <readerQuotas maxArrayLength="76384000" maxStringContentLength="2147483647"/>
            </binding>
        </webHttpBinding>
</bindings>

ここで、サービスをサーバーにデプロイし、slsvcutil.exe を使用してそのメタデータをダウンロードし、コード ファイルと ServiceReferenceConfig ファイルの両方をプロジェクトに保存しました。現在、slsvcutil は SOAP エンドポイントの構成のみを生成します。

ここで、次のコードを使用して、 RestSharpライブラリを使用してサービスを使用しようとします。

public static void sendSighting()
{
    string URL = "http://liveandesor.web711.discountasp.net/wcf/SightingServiceRest.svc/json/SaveNewSightingRest";

    var request = new RestRequest(Method.POST);

    var client = new RestClient(URL);

    request.AddHeader("Accept", "application/json");
    request.AddHeader("Host", "liveandesor.web711.discountasp.net");
    request.AddHeader("Content-type", "application/json");

    JObject json = new JObject();

    json.Add("UserId", "letroll");
    json.Add("Location", "TEST");
    json.Add("Longitude", 50);
    json.Add("Latitude", 50);
    json.Add("Comment", "TEST");
    json.Add("SpeciesId", 438);
    json.Add("_Date", new DateTime(2011, 8, 12));
    json.Add("DateString", (new DateTime(2011, 8, 12)).ToString());
    json.Add("SightingTypeId", 1);
    json.Add("Quantity", 1);
    json.Add("AgeId", 1);
    json.Add("SexId", 1);
    json.Add("PhotoURL", new JArray(new List<String>()));
    json.Add("Request", false);
    json.Add("Visibility", false);
    json.Add("SightingStateId", 1);
    json.Add("Created_at", new DateTime());
    json.Add("Updated_at", new DateTime());

    String jason = json.ToString();

    try
    {
        //request.AddObject(json);
        request.AddBody(jason);

        RestResponse resource;

        client.ExecuteAsync(request, (response) =>
        {
            resource = response;
            string content = resource.Content;
            string status_code = resource.StatusCode.ToString();
            string response_status = resource.ResponseStatus.ToString();
        });
    }
    catch (Exception e)
    {
        string error = "Error: " + e.ToString() + "\n. Stack Trace: " + e.StackTrace;
        Console.WriteLine(error);
    }
}

サンプル コードで指定された URL を使用しようとすると、予期される「エンドポイントが見つかりません」というエラーが表示されます。ただし、URL http://liveandesor.web711.discountasp.net/wcf/SightingServiceRest.svc/soap/SaveNewSightingRestを介して SOAP エンドポイントを使用しようとすると、「Bad Request」ステータス コードが返されます。

なぜこれが起こるのですか?それを機能させる方法はありますか?参考になれば、SOAP サービス用に提供したリンクをクリックするたびに、空白の画面が表示されます。

助けてくれてありがとう!

4

1 に答える 1

2

したがって、コメントに投稿する必要はありません。

あなたの体はフィドラーでどのように見えますか.RestSharpを使用すると、ポコを作成して簡単に,RestRequest.AddBody(MyPoco);

私はURLだと思います:

 string URL = "http://liveandesor.web711.discountasp.net/wcf/SightingServiceRest.svc/json/SaveNewSightingRest";

次のようにする必要があります。

string URL = "http://liveandesor.web711.discountasp.net/wcf/SightingServiceRest.svc";

その後:

RestRequest.Resource = "json/SaveNewSightingRest";

更新:コードをコピーし、url/resource をチャンディングし、フィドラーで本体は次のとおりです:<String /> 明確にするために、これは送信される本体であるため、送信しようとしている json が表示されることが期待されます。

エラーあり:

サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは、DataContractSerializer を使用して、「ルート名 'String' およびルート名前空間を持つ XML 本体を逆シリアル化できません」(操作 'SaveNewSightingRest' およびコントラクト ('ISightingServiceRest'、'http://tempuri.org/') の場合) です。XML に対応する型が、サービスの既知の型コレクションに追加されていることを確認してください。

于 2011-10-05T00:42:58.263 に答える