步骤一:用C#声明WCF
[ServiceContract] public interface IService1 { [OperationContract] void DoWork(); [OperationContract] string GetData(); [OperationContract] string GetData2(string msg); [OperationContract] string GetData3(Order order); [OperationContract] IList<Order> GetList(); } public class Service1 : IService1 { public void DoWork() { } public string GetData() { return DateTime.Now.ToString("成功:" + "yyyy-MM-dd"); } public string GetData2(string msg) { return DateTime.Now.ToString("成功:" + "yyyy-MM-dd 您输入的内容是:" + msg); } public string GetData3(Order order) { return string.Format("成功:{0},OrderId:{1},Qty:{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), order.OrderId, order.Qty); } public IList<Order> GetList() { IList<Order> orders = new List<Order>(); orders.Add(new Order { OrderId = "A001", Qty = 10 }); orders.Add(new Order { OrderId = "A002", Qty = 20 }); orders.Add(new Order { OrderId = "A003", Qty = 30 }); return orders; } } public class Order { public string OrderId { get; set; } public int Qty { get; set; } }
步骤二:用PHP调用:
1.PHT调用WCF无参数 <?php $wcfURL = 'http://192.169.1.100:8090/FPosServer_xncs/r/Service1.svc?wsdl'; $wcfClient = new SoapClient ( $wcfURL ); $result1 = $wcfClient->GetData(); print_r ( $result1 ); ?> 2.PHT调用WCF传递一个string参数 <?php $wcfURL = 'http://192.169.1.100:8090/FPosServer_xncs/r/Service1.svc?wsdl'; $wcfClient = new SoapClient ( $wcfURL ); $args = array('msg' => '312'); $result1 = $wcfClient->GetData2($args); print_r ( $result1 ); ?> 3.PHT调用WCF传递一个对象参数 <?php $wcfURL = 'http://192.169.1.100:8090/FPosServer_xncs/r/Service1.svc?wsdl'; $wcfClient = new SoapClient ( $wcfURL ); $param = array('OrderId'=>'A001','Qty'=>'1'); $result1=$wcfClient->GetData3(array('order'=>$param)); print_r ( $result1 ); ?>
4.Java调用WCF
注意:如果请求的body有中文,一定要加body.getBytes("UTF-8")
public static void main(String[] args) { try { String method = "AddVip"; // AddVip String uri = "http://192.168.18.50:8899/Yinger/YingerService?wsdl"; String body = "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><AddVip xmlns="http://tempuri.org/"><jsonData>{"Vip":"1820000000","VipFrom":"APP","Recommend":"887061217","ChannelId":"5010280001","Name":"小花","Phone":"182000000","Sex":"2","BirthDate":"1992-03-02","Address":"广东省广州市番禺区","Province":"广东省","City":"广州市","District":"番禺区","Email":"86566@qq.com","Level":"会员卡","Password":"8888888","MemberType":"会员"}</jsonData><appKey>test</appKey><appSecret>123456</appSecret></AddVip></s:Body></s:Envelope>"; System.out.println(body); byte[] data = body.getBytes("UTF-8"); URL url = new URL(uri); System.out.println(uri); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setDoOutput(true); // 设置允许输出 conn.setConnectTimeout(20 * 1000); // 设置超时时间为5秒 conn.setReadTimeout(30 * 1000); // 设置请求方式 conn.setRequestMethod("POST"); // 设置请求体属性 conn.setRequestProperty("Content-Type", "text/xml;charset=utf-8"); conn.setRequestProperty("SOAPAction", "http://tempuri.org/IYingerService/" + method); // 发送请求的xml文件 OutputStream outputStream = conn.getOutputStream(); outputStream.write(data); outputStream.flush(); outputStream.close(); int code = conn.getResponseCode(); System.out.println("code:" + code); if (code == 200) { // 读取服务器返回的消息 InputStream in = conn.getInputStream(); StringBuffer sb = new StringBuffer(); byte[] buf = new byte[1024]; for (int n; (n = in.read(buf)) != -1;) { sb.append(new String(buf, 0, n, "utf-8")); } in.close(); conn.disconnect(); System.out.println(sb.toString()); } } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } }
5.C#调用WCF,用windows身份认证,Clinent代码:
//使用BasicHttpBinding绑定 BasicHttpBinding myBinding = new BasicHttpBinding(); //使用Transport安全模式 myBinding.Security.Mode = BasicHttpSecurityMode.Transport; //客户端验证为None myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; //客户端验证为Basic //myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; //客户端验证为Ntlm //myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; //客户端Endpoint地址,指向服务端Endpoint的地址 EndpointAddress ea = new EndpointAddress("https://win2008/WcfIISHostService/Service1.svc/GetIdentity"); GetIdentityClient gc = new GetIdentityClient(myBinding, ea); //客户端为Basic时,客户端提供用户名和密码 //gc.ClientCredentials.UserName.UserName = "chnking"; //gc.ClientCredentials.UserName.Password = "jjz666"; //执行代理类Get方法 string result = gc.Get(WindowsIdentity.GetCurrent().Name);
6.HttpHelper调用WCF,用windows身份认证:
byte[] bytes = Encoding.Default.GetBytes(UserNo + ":" + Password);
string Auth=Convert.ToBase64String(bytes);
string xml = ""; HttpHelper http = new HttpHelper(); HttpItem item = new HttpItem() { URL = "http://pidev.XXXX.com:50000/XISOAPAdapter/MessageServlet?senderParty=&senderService=BC_F360&receiverParty=&receiverService=&interface=SI_DeliveryIn_Req&interfaceNamespace=urn:F3602SAP:DeliveryIn",//URL 必需项 Method = "post",//URL 可选项 默认为Get IsToLower = false,//得到的HTML代码是否转成小写 可选项默认转小写 Cookie = "",//字符串Cookie 可选项 Referer = "",//来源URL 可选项 Postdata = xml,//Post数据 可选项GET时不需要写 Timeout = 100000,//连接超时时间 可选项默认为100000 ReadWriteTimeout = 30000,//写入Post数据超时时间 可选项默认为30000 UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)",//用户的浏览器类型,版本,操作系统 可选项有默认值 ContentType = "text/html",//返回类型 可选项有默认值 Allowautoredirect = false,//是否根据301跳转 可选项 }; //Authorization: Basic RjM2MFBJOmYzNjBhZG1pbjY2 item.Header.Add("Authorization", "Basic RjM2MFBJOmYzNjBhZG1pbjY2"); //此处为base64加密, 明文:F360PI:f360admin66 //SOAPAction: "http://sap.com/xi/WebService/soap1.1" item.Header.Add("SOAPAction", "http://sap.com/xi/WebService/soap1.1"); HttpResult result = http.GetHtml(item); string html = result.Html;
7.RestSharp 使用HttpBasicAuthenticator 调用Shopify
var client = new RestClient("https://developmentsandriver.myshopify.com/") { Authenticator = new HttpBasicAuthenticator("8d654c3a8404fc954d6653b100acbxxx", "sss0836672c0c518764506bf2ed3fe82") }; var request = new RestRequest() { Method = Method.GET, Resource = "admin/products.json", RequestFormat = DataFormat.Json, }; var result = client.Execute(request); var count = result.Content;