错误请求RestSharp Windows Phone 7

时间:2011-10-04 15:43:40

标签: silverlight web-services windows-phone-7 restsharp

我一直在努力创建一个WCF Web服务,将一组数据输入到数据库中,并且可以在Windows Phone 7中使用。在配置文件中有两个端点:json和soap。以下是两者的代码:

<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端点,我只会收到“错误请求”状态代码。

为什么会这样?有什么方法可以让它发挥作用吗?如果它有任何帮助,每次我点击我为SOAP服务提供的链接时,我都会得到一个空白屏幕。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

所以我不必发表评论:

你的身体在小提琴里看起来像什么,使用RestSharp你可以创建一个poco,简单地说,RestRequest.AddBody(MyPoco);

我认为网址:

 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,而在fiddler中,正文是:<String />为了澄清,这是正在发送的正文,所以你希望看到你想要发送的json。

有错误:

  

服务器在处理请求时遇到错误。例外   消息是'无法使用根名称'String'反序列化XML主体   root namespace''(用于操作'SaveNewSightingRest'和契约   ('ISightingServiceRest','http://tempuri.org/'))使用   DataContractSerializer的。确保与XML对应的类型   被添加到已知类型的服务集合中。