呼叫32類庫失敗
阿新 • • 發佈:2018-11-29
描述:使用C#做了一個webservice,部署到IIS上後,通過點選IIS上瀏覽在瀏覽器中開啟webservice可以正常使用webservice中的方法,但是通過java呼叫釋出到IIS上的webservice方法時出現方法呼叫過程中
引用的dll的方法的失敗。想了一下以前遇到過一個問題,asp.net程式使用現在的照片處理類庫時出現過同樣的問題,也沒報錯,就是方法執行失敗。最後通過將程式設定成32位的才解決問題,當時的情況時,在一臺開發筆記本上(當時筆記本上裝了vs2015,C++相關類庫)64位編譯的程式能正常使用,在另一臺電腦上64位編譯的程式不能正常使用,改成32位編譯後就能使用了。
1.C#編寫的webservice
2.webservice屬於web程式無法設定直接設定32或者64位程式,只能在部署到IIS中的時候在建立應用程式池的時候設定允許32位
3.java呼叫C#webservice中的方法
package com.wxzy.ydxt; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import javax.xml.rpc.encoding.XMLType; import org.apache.axis.client.Call; import org.apache.axis.client.Service;public class DecryImage { public static Boolean DecryImg(String originalImagePath,String targetImagePath){ String url = "http://127.0.0.1:1002/ImageUtilWebService.asmx"; String namespace = "http://127.0.0.1:1002/"; //namespace 在此處執行時沒起作用可以隨便怎麼寫或 String methodName = "DecryImage"; String soapActionURI= "http://127.0.0.1:1002/DecryImage"; //ip:port 和c#中的webservice保持一致就行了 Service service=new Service(); Call call; try{ call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); call.setOperationName(new QName(namespace, methodName)); call.addParameter(new QName(namespace, "originalImagePath"), XMLType.XSD_STRING,ParameterMode.IN); call.addParameter(new QName(namespace, "targetIamgePath"), XMLType.XSD_STRING,ParameterMode.IN); call.setReturnType(XMLType.XSD_STRING); String[] str = new String[2]; str[0] = originalImagePath; str[1] = targetImagePath; Object obj = call.invoke(str); System.out.println(obj); } catch(ServiceException e){ e.printStackTrace(); } catch(RemoteException e){ e.printStackTrace(); } return false; } }
4.在呼叫測試過程中,我發現java傳送呼叫請求後,C#是正常載入了dll引用的,但是就是方法執行失敗。將IIS中釋出的webservice的應用程式池改成允許32位後就能成功執行了。