C# 使用C语言中的JSON WCF服务#

C# 使用C语言中的JSON WCF服务#,c#,asp.net,json,wcf,web-services,C#,Asp.net,Json,Wcf,Web Services,我想从我的页面代码中使用json wcf web服务: Default.aspx.cs string result = url + "/ExecuteAction?callback=?"; var httpWebRequest = (HttpWebRequest)WebRequest.Create(result); httpWebRequest.ContentType = "text/json"; httpWebRequest.Method = "POST"; using (var stream

我想从我的页面代码中使用json wcf web服务:

Default.aspx.cs

string result = url + "/ExecuteAction?callback=?";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(result);
httpWebRequest.ContentType = "text/json";
httpWebRequest.Method = "POST";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = new JavaScriptSerializer().Serialize(new
    {
        action = "HelloWorld",
        args = "Nabila"
    });
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var response = streamReader.ReadToEnd();
}
我的服务:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json)]
public string ExecuteAction(string action, string args)
{
    String JSONResult = String.Empty;
    MethodInfo action = services.GetMethod(action, BindingFlags.NonPublic |    BindingFlags.Public | BindingFlags.Static);
    JSONResult =(String)action.Invoke(null, new object[] { args });
}
服务中心

public static string HelloWorld(string msg)
{
    return JsonConvert.SerializeObject("Hello World"+msg);
}
我得到以下例外情况:

从c#使用json wcf web服务远程服务器返回错误:(405)方法不允许。System.Web.Util.CallEventHandlerDelegateProxy.Callback(对象发送方,EventArgs e)

注: 当我使用javascript使用web服务时,它会起作用:

$.ajax({
        type: "POST",
        crossDomain: true,
        timeout: 10000,
        url: getUrl() + "ExecuteAction?callback=?",
        data: { action: "HelloWorld", args: 'test'},
        contentType: "application/json; charset=utf-8",
        dataType: "jsonp"
    }).done(function (msg) {alert("success");}).fail(function () {alert("error");});
你能帮帮我吗

谢谢


Nabila。

我发现您的问题在于数据类型。在Javascript调用中,您将datType设置为jsonp

dataType: "jsonp"
在Default.aspx.cs文件中,您发送的是纯JSON。有

尝试更改Deafult.aspx.cs文件中的JSON类型,然后运行。这可能会解决您的问题

编辑: 将合同更改为:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "json")]
public string ExecuteAction(JSONRequest request)
{
   String JSONResult = String.Empty;
   MethodInfo action = services.GetMethod(action, BindingFlags.NonPublic |    BindingFlags.Public | BindingFlags.Static);
   JSONResult =(String)action.Invoke(null, new object[] { args });
}

[DataContract]
public class JSONRequest
{
   [DataMember]
   public string Action {get; set;}
   [DataMember]
   public string Args {get; set;}
}

May将帮助您查看我的编辑您将方法配置为
WebGet
POST
数据。感谢您的回复,但如何创建jsonp对象?我已更改了合同,但仍然是相同的错误嗯!更改内容类型:application/json;charset=utf-8不知道js。如果有效,请将其标记为已接受,以便其他人可以从中受益。