1. 程式人生 > >呼叫32類庫失敗

呼叫32類庫失敗

描述:使用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位後就能成功執行了。