【发布时间】:2018-04-27 18:53:50
【问题描述】:
大家好,我有以下代码,它通过 jQuery AJAX 调用将 json 字符串发送到我的 asp.net 代码后面,并将其放入它们的类名中。
AJAX 的代码:
$("#WCF").on("click", function () {
var scannerSettings = {
"FileType": "TEST1",
"FileName": "C:\Program Files (x86)\somethibg\Sample\ScanTest\VCS 2008\bin\Debug\image#####",//$('').text(),
"JpegQuality": "TEST2",
"ScanContinue": false,
"Resolution": "TEST3",
"Rotation": "TEST4",
"PaperSupply": "TEST5",
"PaperSize": "TEST6",
"Orientation": "TEST7",
"CustomPaperWidth": 8.268,
"CustomPaperLength": 11.693,
"JobControl": "TEST8",
"PunchHoleRemoval": "TEST9"
};
$.ajax({
type : "POST",
contentType : "application/json",
dataType : "json",
url : ajaxDirPath + "WCF",
data : JSON.stringify({ "obj": scannerSettings }),
cache : false,
success : ServiceSucceeded,
error : ServiceFailed
});
});
ASP.net 代码背后的代码(HomeController.cs):
[HttpPost]
[Audit(EventTypeName = "{controller}/{action} ({verb})", IncludeHeaders = true, IncludeModel = true)]
public string WCF(scannerSettings obj)
{
Dictionary<string, string> resultsBack = new Dictionary<string, string>();
EndpointAddress address = new EndpointAddress(new Uri(ConfigurationManager.AppSettings["EndpointAddress"].ToString()));
NetTcpBinding binding = new NetTcpBinding();
ChannelFactory<IService1> factory;
IService1 SvcCall;
binding.Security.Mode = SecurityMode.Message;
binding.SendTimeout = new TimeSpan(0, 1, 0);
factory = new ChannelFactory<IService1>(binding, address);
SvcCall = factory.CreateChannel();
string scanerData = SvcCall.Scan(obj);
if (scanerData != null)
{
resultsBack.Add("dback", "GOOD");
resultsBack.Add("img", "");
resultsBack.Add("filename", obj.FileName);
}
return JsonConvert.SerializeObject(resultsBack, Formatting.Indented);
}
WCF 代码:
public string Scan(scannerSettings obj)
{
TestDelegate d = new TestDelegate(startScan);
IAsyncResult ar = d.BeginInvoke(obj, null, null);
string result = d.EndInvoke(ar);
return result;
}
从上面的图片可以看出,它从 AJAX->HomeController.cs 发送数据很好,但是一旦我再次将其发送到 WCF 服务器,如 AJAX->HomeController。 cs->WCF 它不再具有所需的值 - 它们都是 null。
json类:
[DataContract]
public class scannerSettings
{
[DataMember]
public string FileType { get; set; }
[DataMember]
public string FileName { get; set; }
[DataMember]
public string JpegQuality { get; set; }
[DataMember]
public bool ScanContinue { get; set; }
[DataMember]
public string Resolution { get; set; }
[DataMember]
public string Rotation { get; set; }
[DataMember]
public string PaperSupply { get; set; }
[DataMember]
public string PaperSize { get; set; }
[DataMember]
public string Orientation { get; set; }
[DataMember]
public string CustomPaperWidth { get; set; }
[DataMember]
public string CustomPaperLength { get; set; }
[DataMember]
public string JobControl { get; set; }
[DataMember]
public string PunchHoleRemoval { get; set; }
}
我通过这个地址使用 NetTcpBinding 在本地连接到 WCF 服务:
net.tcp://localhost:2202/theService/tech6140
有人知道这是为什么以及如何解决吗?
【问题讨论】:
-
我曾经遇到过这个问题,当被传输的对象的命名空间在服务器和客户端之间是不同的,所以完全限定的类型名称不匹配并且WCF服务无法识别它。
-
@DanWilson 你能举例说明你在说什么吗?
-
服务器将
scannerSettings视为Org.Code.scannerSettings,而客户端将其视为ServiceProxy.scannerSettings。我假设客户端使用scannerSettings作为生成的代理类的一部分。 -
@DanWilson 举个例子会更好。
-
我不知道您从哪里获得 Org.Code.scannerSettings 和 ServiceProxy.scannerSettings?
标签: c# ajax asp.net-mvc wcf nettcpbinding