Вызовите метод DELETE службы wcf restful из клиентского приложения. - PullRequest
0 голосов
/ 12 января 2012

Вот как я пытаюсь вызвать метод DELETE из моей службы WCF:

string tmpUrl1 = "http://localhost:1234/MyService.svc/EndPoint/MyMethod";
WebRequest request1 = WebRequest.Create(tmpUrl1);
request1.Method = "DELETE";
byte[] byteArray1 = Encoding.UTF8.GetBytes("{\"idName\":" + newIdName + "}");
request1.ContentType = "application/json";
request1.ContentLength = byteArray1.Length;
Stream dataStream1 = request1.GetRequestStream();
dataStream1.Write(byteArray1, 0, byteArray1.Length);
dataStream1.Close();
WebResponse response1 = request1.GetResponse();

Но я получаю ошибку 400.

Вот имя метода в wcf:

[OperationContract]
    [WebInvoke(
        Method = "DELETE",
        RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "/MyMethod/{deleteRP}/",
        BodyStyle = WebMessageBodyStyle.Bare
                )]
    MyClass MyMethod(string deleteRP);

Где я ошибаюсь?

1 Ответ

0 голосов
/ 12 января 2012

Попробуйте включить Трассировка в своей службе и проверьте журнал трассировки на наличие реальной ошибки.Кроме того, ваш URL-адрес должен иметь что-то вроде

"http://localhost:1234/MyService.svc/EndPoint/MyMethod/55" 

вместо

"http://localhost:1234/MyService.svc/EndPoint/MyMethod"

ОБНОВЛЕНИЕ:

private static byte[] ToByteArrayUsingDataContractSer<T>(T requestBody)
        {
            byte[] bytes = null;
            var serializer1 = new DataContractSerializer(typeof(T));
            var ms1 = new MemoryStream();
            serializer1.WriteObject(ms1, requestBody);
            ms1.Position = 0;
            var reader = new StreamReader(ms1);
            bytes = ms1.ToArray();
            return bytes;
        }

Теперь замените следующую строку

byte[] byteArray1 = Encoding.UTF8.GetBytes("{\"idName\":" + newIdName + "}"); 

с

byte[] array = ToByteArrayUsingDataContractSer<string>("{\"idName\":" + newIdName + "}"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...