惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
F
Full Disclosure
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
L
LangChain Blog
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
GbyAI
GbyAI
Y
Y Combinator Blog
博客园 - Franky
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Jina AI
Jina AI
N
Netflix TechBlog - Medium
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东
腾讯CDC
H
Help Net Security
H
Heimdal Security Blog
J
Java Code Geeks
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
The Exploit Database - CXSecurity.com
The Register - Security
The Register - Security
大猫的无限游戏
大猫的无限游戏
T
Threatpost
B
Blog RSS Feed
T
Threat Research - Cisco Blogs
Microsoft Security Blog
Microsoft Security Blog
S
Securelist
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
量子位
AWS News Blog
AWS News Blog
Project Zero
Project Zero
P
Proofpoint News Feed
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
S
Schneier on Security

博客园 - 阿修罗一平

IIS部署WCF出现的各种问题汇总 Infragistics控件的工具栏注册 NUnit的使用中可能遇到的问题 Linq备忘 Nihibernate的重要知识点 Devexpress使用记录 使用List数据集合,利用DevExpress.XtraReports开发Master-Detail报表 PDA(WinCE)项目开发中遇到的问题及解决方法总结 Grid控件绑定bindingSource后在新增行时设置Cell的初始值 “BindingSource绑定单个实体对象后在代码中赋值无效和无法显示”的解决方法 sqlservier2005转成sqlserver2000中出现的问题(WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) 项目考虑因素及解决方案(.net) 设计模式在工作中的应用(三) 设计模式在工作中的应用(二) 设计模式在工作中的应用(一) NHibernate示例 Remoting服务集成到IIS的简单总结 关于Remoting服务启动和停止的简单总结 将公司系统从SqlServer 2K移植到Oracle 10g中的简要总结
PDA访问WCF
阿修罗一平 · 2009-11-01 · via 博客园 - 阿修罗一平

    最近在做一个系统,客户端有两种类型,有PC和PDA。为了能支持不同的平台,并且复用业务逻辑,采用了WCF。PC及机部署的是WinForm的应用程序,比较容易。现在通过一个简单的例子说一下PDA如何做,注重的是这个过程。

   现在从最开始的服务创建开始:

1、创建服务接口、定义服务端和客户端之间的数据传输类 

[ServiceContract]
    public interface IWcfServcie
    {
        [OperationContract]
        double Add(double x, double y);

        [OperationContract]
        DTO Create(string name, int age);
    }

   [DataContract]
    public class DTO
    {
        [DataMember]
        public string Name = string.Empty;
        [DataMember]
        public int Age = 0;
    }

2、实现接口 

功能非常的简单,一个是将两个数加起来,一个是构造一个DTO对象。

public class WcfServcie : IWcfServcie
    {      
        public double Add(double x, double y)
        {
            return x + y;
        }

        public DTO Create(string name, int age)
        {
            DTO obj = new DTO();
            obj.Name = name;
            obj.Age = age + 1;
            return obj;
        }
    }

3、启动服务端发布服务

   当然发布的方式很多,IIS、Windows Service和WinForm应用程序等都可以作为发布WCF的宿主程序。这里为了简单,我使用console程序进行发布。最关键的还是Uri和binding,如果想在PDA上调用wcf服务,那么binding必须采用BasicHttpBinding,这点必须注意。

            Uri baseUri = new Uri("http://localhost:8080/wcfService");

            using (ServiceHost wcfServiceHost = new ServiceHost(typeof(Service.WcfServcie), baseUri))
            {
                BasicHttpBinding binding = new BasicHttpBinding();

                wcfServiceHost.AddServiceEndpoint(typeof(IWcfServcie), binding, string.Empty);

                ServiceMetadataBehavior behavior = wcfServiceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();

                if (behavior == null)
                {
                    behavior = new ServiceMetadataBehavior();
                    behavior.HttpGetEnabled = true;
                    behavior.HttpGetUrl = baseUri;
                    wcfServiceHost.Description.Behaviors.Add(behavior);
                }
                else
                {
                    behavior.HttpGetEnabled = true;
                    behavior.HttpGetUrl = baseUri;
                }

                wcfServiceHost.Open();

                Console.Read();
            }

4、检查服务是否已发布

编译后启动服务端程序,使用“:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\WcfTestClient.exe”,可以检查服务是否正常发布,当然也可以使用IE。我一般使用WcfTestClient.exe,它可以针对每个方法做测试。

5、创建PDA上WCF服务代理类

可以手动写这部分代码,如果不想自己写代理类,那就下载NETCFv35PowerToys.msi并安装,然后“:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\bin”会有一个程序NetCFSvcUtil.exe。通过cmd执行“NetCFSvcUtil.exe http://localhost:8080/wcfService" ,\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\bin目录下会出现生成的两个文件CFClientBase.cs和WcfServcie.cs,这就是服务的代理类。需要注意的是WcfServcie.cs中”public static System.ServiceModel.EndpointAddress EndpointAddress = new System.ServiceModel.EndpointAddress("http://localhost:8080/wcfService");“,将”localhost“改为服务端的Ip。

6、创建SmartSeviceProject,平台根据具体项目情况决定,然后将上面创建的两个文件加入到项目中

      WcfServcieClient service = new WcfServcieClient();//服务代理对象

        private void button1_Click(object sender, EventArgs e)
        {
            this.textBox6.Text = service.Add(Convert.ToDouble(this.textBox1.Text), Convert.ToDouble(this.textBox2.Text)).ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            DTO obj = null;
            obj = service.Create(textBox4.Text, Convert.ToInt32(textBox3.Text));
            textBox5.Text = string.Format("Name is : {0} Age is : {1}", obj.Name, obj.Age);
        }

7、编译SmartDevice项目后运行。打完,收工。

 项目代码:https://files.cnblogs.com/yiping06993010/WCFTest.rar