Console.WriteLine('学无止境');|

寻找和谐

园龄:15年1个月粉丝:497关注:4

Wince 中访问WCF服务

由于本文并非WinCE开发普及篇,所以一些WinCE开发和WCF开发的基础还请移步百度和谷歌寻找答案,然后结合本文开发出WinCE中如何访问WCF,谢谢。

 

开发环境

IDE:Visual Studio 2008 (2010、2012、2013目前都不支持)

OS:Win 7 (64位)

Tools:ActiveSync win7 v6.1(设备中心,给Pocket PC 2003模拟器提供网络)

模拟器网络连接攻略一份:http://www.jb51.net/softjc/42088.html

创建WinCE项目

请恕本文并非WinCE开发普及篇,所以这些请百度吧。

 

WCF服务端

app.config中关键代码

复制代码
<service behaviorConfiguration="SystemDispatchServiceForPDABehavior" name="SystemManageServiceLibrary.SystemDispatchServiceForPDA">
        <!--PDA系统分配-->
        <endpoint address="http://localhost:20003/SystemDispatchForPDA/SystemDispatchServiceForPDA"
          binding="webHttpBinding"
          contract="SystemManageServiceLibrary.SystemDispatch.ISystemDispatchServiceForPDA" >
        </endpoint>
        <!--PDA系统分配元数据-->
        <endpoint address="http://localhost:20003/SystemDispatchForPDA/SystemDispatchServiceForPDA/mex"
          binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:20003/SystemDispatchForPDA"/>
          </baseAddresses>
          <timeouts openTimeout="00:00:30" />
        </host>
      </service>
View Code
复制代码

服务契约 - 公布WCF REST(详细的可以百度搜索 WCF REST)

复制代码
    [ServiceContract]
    public interface ISystemDispatchServiceForPDA
    {
        /// <summary>
        /// PDA获取集群信息
        /// </summary>
        /// <param name="strPDA_IMEI">PDA内部出厂序号</param>
        /// <returns></returns>
        [OperationContract]
        //UriTemplate 实际就是通过http协议发送请求的url规则,把{strPDA_IMEI}替换成真实的PDA串号即可
        [WebGet(UriTemplate = "GetClusterInfo/{strPDA_IMEI}")]
        CLUSTER GetClusterInfo(string strPDA_IMEI);
    }
View Code
复制代码

 

WinCE

HttpWrapper.cs - Http请求的封装,访问WCF提供的REST服务

复制代码
    public class HttpWrapper
    {
        public static string SendRequest(string url)
        {
            HttpWebResponse response = null;
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "GET";
            request.AllowWriteStreamBuffering = false;
            request.KeepAlive = true;
            request.ContentType = "application/x-www-form-urlencoded";

            // 接收返回的页面
            response = request.GetResponse() as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
            string strResult = reader.ReadToEnd();
            reader.Close();
            response.Close();
            return strResult;
        }
    }
View Code
复制代码

XmlAdapter.cs - Xml适配器,用于将Xml转换成类

复制代码
    public class XmlAdapter
    {
        public static T ConvertToClass<T>(string strXML) where T : class
        {
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

            MemoryStream reader = new MemoryStream(Encoding.UTF8.GetBytes(strXML));

            T obj = xmlSerializer.Deserialize(reader) as T;

            reader.Dispose();

            return obj;
        }
    }
View Code
复制代码

调用方法

复制代码
        private static string URL = "http://ip:20003/SystemDispatchForPDA/SystemDispatchServiceForPDA/";

        public static CLUSTER GetClusterInfo(string strPDA_IMEI)
        {
            string strResponse = HttpWrapper.SendRequest(URL + "GetClusterInfo/" + strPDA_IMEI);

            CLUSTER cluster = XmlAdapter.ConvertToClass<CLUSTER>(strResponse);

            return cluster;
        }
复制代码

 

 

真正需要注意的其实就是几点:

1.安装设备中心

2.设置模拟器网络连接

3.WCF REST

4.WinCE解析WCF返回的XML,以及如何拼接访问的URL

    

posted @   寻找和谐  阅读(1334)  评论(1编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Home 王诗安
Home - 王诗安
00:00 / 00:00
An audio error has occurred.