Java连接重置
我们正在使用SOAP1.1 我们还创建了一个WCF Web服务,它在SOAP UI中运行良好 当我们试图在java中通过SOAP获得响应时,连接已经建立,但没有收到任何数据 我们得到了这样的回应:Java连接重置,java,wcf,soap,Java,Wcf,Soap,我们正在使用SOAP1.1 我们还创建了一个WCF Web服务,它在SOAP UI中运行良好 当我们试图在java中通过SOAP获得响应时,连接已经建立,但没有收到任何数据 我们得到了这样的回应: HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/7.5 X-Powered-By: ASP.NET Da
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 16 Oct 2012 12:05:28 GMT
Content-Length: 148
在此之后,未收到SOAP响应,并引发此错误:
ERROR : java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:154)
at java.io.BufferedReader.readLine(BufferedReader.java:317)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
at ICNumber.main(ICNumber.java:113)
以下是代码片段:
String SOAPRequest ="<soapenv:Envelope"+
"xmlns:soapenv"+
"=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">"+
"<soapenv:Header>"+
"</soapenv:Header>"+
"<soapenv:Body>"+
"<tem:ICNumberValidation>"+
"<tem:ICNumber>"+
strIC+
"</tem:ICNumber>"+
"</tem:ICNumberValidation>"+
"</soapenv:Body>"+
"</soapenv:Envelope>";
try {
//Create socket
String hostname = "192.168.1.xx";
int port = 90;
InetAddress addr = InetAddress.getByName(hostname);
SocketAddress sockaddr = null;
try
{
sockaddr = new InetSocketAddress(addr, (port));
}
catch(IllegalArgumentException e)
{
System.out.println("ErrorCode-6001");
}
Socket sock = new Socket();
try
{
sock.connect(sockaddr, 10000);
}
catch(Exception e)
{
System.out.println( "ErrorCode-6001");
}
//Send header
String path = "/Service1.svc";
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream(),"UTF-8"));
// You can use "UTF8" for compatibility with the Microsoft virtual machine.
wr.write("POST " + path + " HTTP/1.1\r\n");
wr.write("Accept-Encoding: gzip,deflate\r\n");
wr.write("Host: " + hostname + "\r\n");
wr.write("Content-Length: " + SOAPRequest.length() + "\r\n");
wr.write("Content-Type: text/xml; charset=\"utf-8\"\r\n");
wr.write("SOAPAction: \"http://tempuri.org/IService1/ICNumberValidation\"\r\n");
wr.write("Connection: Keep-Alive\r\n");
wr.write("User-Agent: Apache-HttpClient/4.1.1 (java 1.5)\r\n");
wr.write("\r\n");
//Send data
wr.write(SOAPRequest);
wr.flush();
//response read
BufferedReader reader = new BufferedReader( new InputStreamReader( sock.getInputStream() ) );
String line = "";
String line2 = "";
while((line = reader.readLine()) != null)
{
line2 = line2 + line+"\n";
System.out.println(line2);
}
System.out.println(line2);
String SOAPRequest=“”+
""+
""+
""+
""+
""+
strIC+
""+
""+
""+
"";
试一试{
//创建套接字
字符串hostname=“192.168.1.xx”;
int端口=90;
InetAddress addr=InetAddress.getByName(主机名);
SocketAddress sockaddr=null;
尝试
{
sockaddr=新的InetSocketAddress(地址,(端口));
}
捕获(IllegalArgumentException e)
{
系统输出打印项次(“错误代码-6001”);
}
插座插座=新插座();
尝试
{
sock.connect(sockaddr,10000);
}
捕获(例外e)
{
系统输出打印项次(“错误代码-6001”);
}
//发送头
字符串路径=“/Service1.svc”;
BufferedWriter wr=新的BufferedWriter(新的OutputStreamWriter(sock.getOutputStream(),“UTF-8”);
//您可以使用“UTF8”与Microsoft虚拟机兼容。
write(“POST”+path+“HTTP/1.1\r\n”);
write(“接受编码:gzip,deflate\r\n”);
write(“主机:“+hostname+”\r\n”);
write(“内容长度:“+SOAPRequest.Length()+”\r\n”);
write(“内容类型:text/xml;字符集=\“utf-8\”\r\n”);
wr.write(“SOAPAction:\”http://tempuri.org/IService1/ICNumberValidation\“\r\n”);
write(“连接:保持活动\r\n”);
write(“用户代理:ApacheHttpClient/4.1.1(Java1.5)\r\n”);
wr.write(“\r\n”);
//发送数据
wr.write(SOAPRequest);
wr.flush();
//响应读取
BufferedReader=新的BufferedReader(新的InputStreamReader(sock.getInputStream());
字符串行=”;
字符串line2=“”;
而((line=reader.readLine())!=null)
{
line2=line2+line+“\n”;
系统输出打印项次(第2行);
}
系统输出打印项次(第2行);
你能发布相关代码吗?具体来说,你在哪里接受/创建连接,在哪里接收数据。你在使用什么Java SOAP库?@thegrinner:我已经在上面添加了代码片段itself@BenBurns:导入javax.xml.parsers.DocumentBuilder;导入javax.xml.parsers.DocumentBuilderFactory;导入org.w3c.dom.Document;导入org.w3c.dom.Element;导入org.w3c.dom.Node;导入org.w3c.dom.NodeList;导入org.xml.sax.InputSource;IIS事件日志中是否存在任何错误?