java調用wcf
① 怎麼用cxf的wsdl2java解析wcf生成的wsdl
1、下載apache-cxf-2.6.2在環境變數中配置CXF_HOME ,在PATH中加入%CXF_HOME%\bin 2、輸入cmd 進入控制窗口,輸入wsdl2java看是否配置成功
3、參考它的文檔看這個工具的具體參數的用法
wsdl2java用法:
wsdl2java -p com -d src -all aa.wsdl
-p 指定其wsdl的命名空間,也就是要生成代碼的包名:
-d 指定要產生代碼所在目錄
-client 生成客戶端測試web service的代碼
-server 生成伺服器啟動web service的代碼
-impl 生成web service的實現代碼
-ant 生成build.xml文件
-all 生成所有開始端點代碼:types,service proxy,,service interface, server mainline, client mainline, implementation object, and an Ant build.xml file.
詳細用法見:http://cwiki.apache.org/CXF20DOC/wsdl-to-java.html
② 求教調用WCF超時問題的解決辦法
在 Silverlight 端設置 SendTimeout 和 ReceiveTimeout 屬性,經常在 Debug 時需要調試上好幾分鍾、或者放上幾十分鍾。
可以在 ServiceReferences.ClientConfig 中配置,不過個人習慣使用後台代碼,畢竟配置最靈活:
BasicHttpBinding 在 Debug/ Release 時的代碼配置
C# code
defaultBasicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.None)
{
Name = "DefaultBasicHttpBinding",
OpenTimeout = new TimeSpan(0, 1, 0),
CloseTimeout = new TimeSpan(0, 1, 0),
#if DEBUG
SendTimeout = new TimeSpan(0, 18, 00),
ReceiveTimeout = new TimeSpan(18, 18, 00),
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue
#else
SendTimeout = new TimeSpan(0, 8, 00),
ReceiveTimeout = new TimeSpan(0, 18, 00),
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue
#endif
};
CustomBinding
C# code
customBinding = new CustomBinding()
{
Name = "CustomBinding",
OpenTimeout = new TimeSpan(0, 1, 0),
CloseTimeout = new TimeSpan(0, 1, 0),
#if DEBUG
SendTimeout = new TimeSpan(0, 18, 00),
ReceiveTimeout = new TimeSpan(18, 18, 00),
#else
SendTimeout = new TimeSpan(0, 8, 00),
ReceiveTimeout = new TimeSpan(0, 18, 00),
#endif
};
customBinding.Elements.Add(new System.ServiceModel.Channels.());
customBinding.Elements.Add(new HttpTransportBindingElement()
{
MaxBufferSize = int.MaxValue, MaxReceivedMessageSize= int.MaxValue
}
);
③ 如何調用帶參數的WCF方法
[OperationContract(Name="sayHelloJson")]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "sayHello", BodyStyle = WebMessageBodyStyle.Wrapped)]
String sayHello();
[OperationContract(Name = "SendMessageJson")]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "SendMessage/{Message}", BodyStyle = WebMessageBodyStyle.Wrapped)]
String SendMessage(String Message);
比如說第一個不帶參數的:http://localhost:8000/Service/Json/sayHello
那麼第二個帶參數的應該怎麼調用?(比如說參數是"abc")
我指的是在瀏覽器中或java的httpclient中,因為我准備在android上實現客戶端,所以.net的調用方式就不必講了。
你URITemplate已經設置了。Get方式。
我猜測一下調用的URL應該是: 網站URL/SendMessage/你好
另外建議你使用REST WCF自帶的一個幫助頁面,裡面會給出更精確的調用示例。