首页 新闻 会员 周边 捐助

请教有个WebService的错误。非常危急

1
悬赏园豆:200 [已解决问题] 解决于 2010-11-30 13:51

有一个客户提供的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: 

问题补充: 1) Stylus Studio 2011 XML企业版 调试这个 SOAP,也出错。基本可以肯定是Server那边有问题。但也要想办法证明错不在我们。 2) 经过努力,发现SOAPExtension 在浏览器中是不会执行的。而App 访问时会执行SoapExtension。谢谢各位了。下个星期2就知道结果。到时候我会结贴,感谢大家。 3) 已经确认是客户的问题,呵呵,他们的技术人员很没有面子。谢谢各位。
沉默的糕点的主页 沉默的糕点 | 小虾三级 | 园豆:1786
提问于:2010-11-26 14:05
< >
分享
最佳答案
0

好像是认证的时候发生了空类型的错误。是不是某个参数未初始化。

收获园豆:155
wang_yb | 老鸟四级 |园豆:4893 | 2010-11-26 14:11
因为Web Service是客户的,我们只能连,不能调整他们的Web Service。 同样的方法,在另外的URL都可以。而且方法只是 DistrictDataSet GetDistrict()。 应该不存在参数没有初始化的问题。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 14:17
这个webservice连之前需要认证的吧。从异常来看,好像是没认证就直接用DistrictDataSet GetDistrict()了
wang_yb | 园豆:4893 (老鸟四级) | 2010-11-26 14:25
是不是我要设定AuthHeader呢?但是因为WebService是IP绑定,特定的IP才能访问。另外已经跟客户的技术人员确认,他们没有启用AuthHeader的这个功能(就算他们启用了,我也....)。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 14:33
那可能是服务端有错误,在调用DistrictDataSet GetDistrict()之前可能还有一些其他调用吧。
wang_yb | 园豆:4893 (老鸟四级) | 2010-11-26 14:56
没有啊。GetDistrict()之前什么都没有。因为本身提供一个Demo Url,我用这个测试都没有任何问题。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 14:58
错误信息中: AAWebServLIB.AuthExtension.。。。。 。。。。 System.Web.Services.Protocols.SoapServerProtocol.CreateServerInstance。。 。。。 从这些看出可能是AAWebServLIB.AuthExtension这个类导致服务端实例化失败,所有有System.NullReferenceException。 能看看AAWebServLIB.AuthExtension是什么不?
wang_yb | 园豆:4893 (老鸟四级) | 2010-11-26 15:40
就是不能看。客户说,浏览器可以,为甚你的程序不行了,肯定是我的程序有问题。郁闷坏我,正在研究SOAP协议,看看有没有办法解决。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 22:31
其他回答(8)
0

System.NullReferenceException: Object reference not set to an instance of an object

错误信息中出现很常见的"未将对象引用设置到对象的实例",没有"应该不存在"的问题吧...楼主调试跟踪下数据看看...

收获园豆:25
三桂 | 园豆:3565 (老鸟四级) | 2010-11-26 14:23
全段是 Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of ,也就是这个异常发生在服务器。 另外我也无权... 郁闷,最恨做这些接入系统。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 14:35
0

不是很懂

Specialaspnet | 园豆:70 (初学一级) | 2010-11-26 16:10
0
/// <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];
}

参考:http://www.camnpr.com

收获园豆:5
camnpr | 园豆:120 (初学一级) | 2010-11-26 16:41
************** 异常文本 ************** System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 200.200.200.62:8443 在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 在 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP) 在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) --- 内部异常堆栈跟踪的结尾 --- 在 System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 在 System.Net.HttpWebRequest.GetRequestStream() 在 System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 在 LinkJavaServer.localhost.IwebService.getAll(String in0, String in1) 位置 D:\My Documents\Downloads\LinkJavaServer\LinkJavaServer\LinkJavaServer\Web References\localhost\Reference.cs:行号 85 在 LinkJavaServer.LinkWebServerJava.btnHttps_Click(Object sender, EventArgs e) 位置 D:\My Documents\Downloads\LinkJavaServer\LinkJavaServer\LinkJavaServer\LinkWebServerForm.cs:行号 84 在 System.Windows.Forms.Control.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnClick(EventArgs e) 在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.ButtonBase.WndProc(Message& m) 在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
支持(0) 反对(0) camnpr | 园豆:120 (初学一级) | 2010-11-26 16:49
ServicePointManager 每次Validate 证书的时候,但返回true。也就是根本不验证证书。所以不是https的问题。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 17:48
0

我是不是可以告诉你该方法 DistrictDataSet GetDistrict()返回的soap消息格式同自动生成的客户端代理类的格式不一致?

对方是不是使用了诸如java,php等非.net技术发布的web service?

1,找到 SoapUI 的免费版工具,通过该工具测试 DistrictDataSet GetDistrict()方法;

2,使用 Fiddler 抓取http请求,检查请求是否已经返回正确数据,只是你的客户端无法正常反序列化.

收获园豆:5
Launcher | 园豆:45050 (高人七级) | 2010-11-26 17:05
已经确认过,SOAP XML 和 XSD 是一直的。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 17:44
Stylus Studio 2011 XML企业版 测试过,出错,错误和我的一致。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 17:49
@沉默的糕点:用 SoapUI 测试。
支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2010-11-27 10:33
0

有没有可能,他提供的wsdl不是最新的,所以通过浏览器可以,但用代理类就有问题

收获园豆:5
wgz | 园豆:1254 (小虾三级) | 2010-11-26 17:11
我尝试更新N次了。
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 17:44
0

我觉得是不是存在跨域的问题?你通过后台转发来调用接口试一试....

收获园豆:5
勤劳的渔网工作者 | 园豆:572 (小虾三级) | 2010-11-26 22:30
好的,谢谢。我找网管尝试一下。今天又是不眠夜
支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2010-11-26 22:33
0

现在我也遇到这个问题,请问是如何解决?

CBT9523 | 园豆:4 (初学一级) | 2012-03-28 16:16

凡是以 “Server was unable to process request. -” 开始的都是webService服务器那边错误,如果用浏览器调试,不会启动SoapHeader的代码所以不会出错。如果发现这类错误,只能请webservice的开发商帮忙

支持(0) 反对(0) 沉默的糕点 | 园豆:1786 (小虾三级) | 2012-03-28 23:32

我做的是 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. 请问这是个什么问题呀? 

支持(0) 反对(0) CBT9523 | 园豆:4 (初学一级) | 2012-03-29 10:32

@沉默的糕点: 我现在也正遇到这个问题 请问最终对方是怎么解诀这个问题的

支持(0) 反对(0) Cancer721 | 园豆:200 (初学一级) | 2016-04-11 17:58
0

尝试了两天终于解决了。已知道的是服务器域认证,iis中application pools中Process Model中设置Identity为localsystem,测试通过

写代码的厨子 | 园豆:208 (菜鸟二级) | 2017-01-09 13:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册