有一个客户提供的WebService,使用https发布的。根据SOAP的异常,我认为是WebService 方面的错误,但是客户坚持没有任何问题,因为用浏览器(IE,FF,Chrome)访问没有任何问题,可以返回正常的数据。我模拟了浏览器XML Data,在我测试中没有任何问题,所以可以排除返回的XML错误。
那么究竟是什么错误呢,是防火墙,网络,https访问不当,还是什么原因,请大家帮忙,谢谢。
我已经做了https的跳出检查。在测试环境下没有任何问题。真实环境,并没有出现信任Exception,或者SSL的异常,因此可以排除Https访问不当的原因,https的代码如下:
private static void Main(string[] args)
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(check);
}
private static bool check(object sender, X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslpolicyerrors)
{
return true;
}
错误的信息如下:
System.Web.Services.Protocols.SoapException was unhandled Message="System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.\n at AAWebServLIB.AuthExtension.ProcessMessage(SoapMessage message)\n at System.Web.Services.Protocols.SoapMessage.RunExtensions(SoapExtension[] extensions, Boolean throwOnException)\n at System.Web.Services.Protocols.SoapServerProtocol.CreateServerInstance()\n at System.Web.Services.Protocols.WebServiceHandler.Invoke()\n at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()\n --- End of inner exception stack trace ---" Source="System.Web.Services" Actor="" Lang="" Node="" Role="" StackTrace: at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall) at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) at ClassLibrary1.WebReference.mwWebSrvStAc.GetBoard() in C:\SchoolConnects\920\Trunk\sims\Maplewood\YCDSB\ConsoleApplication1\ConsoleApplication1\ClassLibrary1\Web References\WebReference\Reference.cs:line 992 at ConsoleApplication1.Program.Main(String[] args) in C:\SchoolConnects\920\Trunk\sims\Maplewood\YCDSB\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1\Program.cs:line 16 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
好像是认证的时候发生了空类型的错误。是不是某个参数未初始化。
System.NullReferenceException: Object reference not set to an instance of an object
错误信息中出现很常见的"未将对象引用设置到对象的实例",没有"应该不存在"的问题吧...楼主调试跟踪下数据看看...
不是很懂
/// <summary>
/// 基于https访问方式调用webservice
/// </summary>
private void btnHttps_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();
localhost.IwebService objSessionManager = new localhost.IwebService();
//安全访问的webservice地址
objSessionManager.Url = System.Configuration.ConfigurationSettings.AppSettings["WebService.MocService"];
objSessionManager.Credentials = System.Net.CredentialCache.DefaultCredentials; // WSE 3.0 method
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
//客户端安装证书名称
string findValue = "MyKey";
X509Certificate2Collection certsCollection = store.Certificates.Find(X509FindType.FindByIssuerName, findValue, false);
X509Certificate2 cert;
if (certsCollection.Count > 0)
{ //导入客户端证书
cert = certsCollection[0];
objSessionManager.ClientCertificates.Clear();
objSessionManager.ClientCertificates.Add(cert);
}
//下面是调用webservice服务getAll
ds = ArrayToDataSet.ObjectArrayToDataSet(objSessionManager.getAll("nq", "nqdev"));
//绑定控件
GV1.DataSource = ds.Tables[0];
}
我是不是可以告诉你该方法 DistrictDataSet GetDistrict()返回的soap消息格式同自动生成的客户端代理类的格式不一致?
对方是不是使用了诸如java,php等非.net技术发布的web service?
1,找到 SoapUI 的免费版工具,通过该工具测试 DistrictDataSet GetDistrict()方法;
2,使用 Fiddler 抓取http请求,检查请求是否已经返回正确数据,只是你的客户端无法正常反序列化.
有没有可能,他提供的wsdl不是最新的,所以通过浏览器可以,但用代理类就有问题
我觉得是不是存在跨域的问题?你通过后台转发来调用接口试一试....
现在我也遇到这个问题,请问是如何解决?
凡是以 “Server was unable to process request. -” 开始的都是webService服务器那边错误,如果用浏览器调试,不会启动SoapHeader的代码所以不会出错。如果发现这类错误,只能请webservice的开发商帮忙
我做的是 PDA 项目,PC的IE调用WebService 正常,WiFi下PDA里的IE调用WebService 正常,USB下PDA里的IE调用WebService 正常,问题是USB下代码里调用WebService就出现 System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> Object reference not set to an instance of an object. 请问这是个什么问题呀?
@沉默的糕点: 我现在也正遇到这个问题 请问最终对方是怎么解诀这个问题的
尝试了两天终于解决了。已知道的是服务器域认证,iis中application pools中Process Model中设置Identity为localsystem,测试通过