再见西城 发表于 2015-1-18 11:51:12

IOS设计WCF for .NET CF疾速进门仓酷云

有一些像NSCopying的接口(经@李禹龙提醒应该叫协议)不是特别用到开始不用了解NSObject创建对象的时候用+(id)alloc方法创建后需要init方法初始化择要
本文能够看做是ChrisTacke的文章AnIntroductiontoWCFforDeviceDevelopers的翻译,文中代码因为笔者调试必要稍作了修正,部分做了进一步的申明,并将部分链接更新。
Keyword
WindowsMobile,WCF,.NETCF,Services,XmlSerialization
这是一篇我保举给良多伴侣看过的文章。文章很短,也没有触及太多WCF道理性的工具,可是作为WCFMobile开辟进门,这倒是个很好的导游,为了便利浏览,有些中央我做了分外的申明。
Enjoyit~
1开辟情况与工具
1.VisualStudio2008(Orcas)RTM.
2.PowerToysfor.NETCompactFramework3.5
3.一台撑持.NETCompactFramework3.5的WindowsMobile5.0/6.0的摹拟器大概设备.
(ChrisTacke在他的设备上调试乐成,在摹拟器上因为某些不成知的要素失利了。笔者在摹拟器上调试乐成)
4.WindowsXP大概Vista的操纵体系
(ChrisTacke在XP下调试的,笔者则是在Vista下)

2PC真个WCF服务程序
固然,这只是一个很复杂的模子,就是经由过程WCF使挪动设备与PC举行信息交互。
起首,我们必要在PC机上构建一个服务,这个服务虚现的功效很复杂,就是举行两个整数的加法,并前往了局。
第一步,翻开你的VS创立一个把持台程序,并增加援用:System.ServiceModel
然后,增加一个新的类(现实上是一个接口,它用于界说我们的服务所表露出来的左券),我们把这个类定名为IMyProcess,其内容以下:

<br>usingSystem.ServiceModel;

<br>namespaceFreesc.WCF.Demo

<br>
<br>
<br>{

<br>

<br>publicinterfaceIMyProcess

<br>
<br>
<br>{

<br>

<br>intAdd(inta,intb);

<br>}

<br>}接上去,我们必要一个该托言的详细完成来作为我们的服务。为我们的工程另增加一个类,叫做MyProcessService,也就只包括一个Add办法。其代码以下:

<br>usingSystem;

<br>

<br>namespaceFreesc.WCF.Demo

<br>{

<br>publicclassMyProcessService:IMyProcess

<br>{

<br>publicintAdd(inta,intb)

<br>{

<br>Console.WriteLine(string.Format(

<br>"Received"Add({0},{1})"returning{2}",a,b,a+b));

<br>returna+b;

<br>}

<br>}

<br>}

<br>好,服务的内容已写好了,我们必要来看看这个PC真个Server是怎样事情的了。起首,请将你的Program.cs交换为以下代码:

<br>usingSystem;

<br>usingSystem.ServiceModel;

<br>usingSystem.ServiceModel.Description;

<br>usingSystem.Net;

<br>

<br>namespaceFreesc.WCF.Demo

<br>{

<br>classProgram

<br>{

<br>staticvoidMain(string[]args)

<br>{

<br>//取得服务器IP

<br>stringhostIP=Dns.GetHostEntry(Dns.GetHostName()).AddressList.ToString();

<br>#ifCLIENT_DISCOVERY_BUILD

<br>Uriaddress=newUri(string.Format("http://localhost:8000/calculator",hostIP));

<br>#else

<br>Uriaddress=newUri(string.Format("http://{0}:8000/calculator",hostIP));

<br>#endif

<br>ServiceHostserviceHost=newServiceHost(typeof(MyProcessService),address);

<br>try

<br>{

<br>//增加一个服务节点

<br>serviceHost.AddServiceEndpoint(

<br>typeof(IMyProcess),

<br>newBasicHttpBinding(),

<br>"Calculator");

<br>#if!CLIENT_DISCOVERY_BUILD

<br>//同意运转时的元数据交互(利用NetCfSvcUtil工具)

<br>ServiceMetadataBehaviorsmb=newServiceMetadataBehavior();

<br>smb.HttpGetEnabled=true;

<br>serviceHost.Description.Behaviors.Add(smb);

<br>#endif

<br>serviceHost.Open();

<br>Console.WriteLine("MyProcessServiceisrunningat"+address.ToString());

<br>Console.WriteLine("Press<ENTER>toterminate");

<br>Console.ReadLine();

<br>//把服务形态置为封闭

<br>serviceHost.Close();

<br>}

<br>catch(CommunicationExceptionce)

<br>{

<br>Console.WriteLine("Anexceptionoccured:{0}",ce.Message);

<br>serviceHost.Abort();

<br>}

<br>}

<br>}

<br>}

<br>

<br>这段程序要稍稍庞大一点,起首,你大概会注重到这里用了一些预编译指令。利用这些预编译指令是由于我们要在稍后的一个工具中会见这个运转的服务并为我们天生一些代码。假如你临时还对照晕的话,别急,稍后会说到这个工具的。
这里的CLIENT_DISCOVERY_BUILD只是一个前提编译的标记,您临时能够忽视之。实在这里只是为了我们编译代码的时分版本切换对照便利。
某些情形下我们但愿把后面编译的A版本的代码暂存起来,以避免在CS文件中该来改来改往,这时候只必要在Debug的设置项面前目今做一些修正,好比这里我们加上了Discover这一项,用记事本翻开工程文件,能够看到这一段:

<br><PropertyGroupCondition=""$(Configuration)|$(Platform)"=="Discovery|AnyCPU"">

<br><DebugSymbols>true</DebugSymbols>

<br><OutputPath>bin"Discovery"</OutputPath>

<br><DefineConstants>TRACE;DEBUG;CLIENT_DISCOVERY_BUILD</DefineConstants>

<br><DebugType>full</DebugType>

<br><PlatformTarget>AnyCPU</PlatformTarget>

<br><ErrorReport>prompt</ErrorReport>

<br></PropertyGroup>好,那这一段主程序代码究竟有甚么感化呢?起首,我们必要为我们的服务创立一个Uri。
要创立这个Uri起首要晓得本机的IP。这里假如你间接CopyChrisTacke的代码大概不克不及运转(出格是Vista用户),大概会抛出一个如许的非常:

<br>
这个时分你必要反省你的IPAddress的AddressFamily,大概间接CMD下观察ipconfig,假如是IPV6的话(如我呆板上的AddressList就是iPV6的格局),则会抛除上述非常,iPv4则统统OK。
接上去,我们创立了一个服务主机(ServiceHost)和一个服务节点(endpoint),请注重,这里我们用的协定绑定体例是BasicHttpBinding,在精简版的WCFframework中默许只要两种绑定绑定体例(另外一种是WindowsMobileMailBinding,我在从此的文章中会先容)。然后我们给服务起了个名字叫做“Calculator”。
接上去,能够看到我们先条件到过的前提编译标记,在我们开启Discovery的设置情况下,我们的工具(下文会提到)能够与该程序集的元数据举行交互用来天生一些代码,不外下面的代码里是处于关失落的形式。
好了,如今能够来试着编译这段代码了,编译的时分请确保在Discover的形式下。

<br>
假如统统OK,你将会看到以下的画面:

<br>
注重:假如是Vista用户,假如开启了UAC,你大概必要以办理员的身份运转编译好的可实行程序,不然大概会有某些权限成绩。
然后,我们在扫瞄器中键进这里显现的地点,能够看到以下画面

<br>
假如你切实其实看到上述页面,很好,我们的事情已完成一半了。
3.NetCFSvcUtil.exe
上面我们必要借助一个小工具---netcfSvcUtil来匡助我们天生一些代码,这个办法合用于那些初度举行WCFforMobile编程的人,大概是象我如许对照懒,对照喜好利用小工具的程序员。
翻开你的命令行工具,你的PowerToy默许安装在相似如许的目次下:
C:"ProgramFiles"Microsoft.NET"SDK"CompactFramework"v3.5"bin.
在之前的服务运转的时分,在该目次下运转以下的命令:
netcfSvcUtil.exe/language:cshttp://localhost:8000/calculator
你能够看到如图的输入:

<br>
此时你会发明在该目次下天生了两个CS文件,这里分离是MyProcessService.cs和CFClientBase.cs
在接上去的步骤中,我们会用到这两个文件。
4.CF真个使用程序
接上去,我们新建一个SmartDevice的窗体使用程序,工程定名为DeviceClient。将后面天生的那两个文件Copy到该工程中来,然后,我们得增加以下一些援用(次要是那两个由工具天生的cs文件必要):
-System.ServiceModel
-System.Runtime.Serialization
这里的代码以下:

<br>publicForm1()

<br>{

<br>InitializeComponent();

<br>try

<br>{

<br>//在TextBox中显现本机IP

<br>tbMyIP.Text=Dns.GetHostEntry(

<br>Dns.GetHostName()).AddressList.ToString();

<br>}

<br>catch(Exceptionex)

<br>{

<br>MessageBox.Show("NoNICfound?");

<br>}

<br>}

<br>privatevoidmenuCalculate_Click(objectsender,EventArgse)

<br>{

<br>inta=0;

<br>intb=0;

<br>try

<br>{

<br>//承受文本框的输出,并存进整形变量a,b中

<br>a=int.Parse(tbFirst.Text);

<br>b=int.Parse(tbSecond.Text);

<br>}

<br>catch

<br>{

<br>//假如转换失利(好比填进了有效的数字)则间接前往

<br>return;

<br>}

<br>SMC.Bindingbinding=MyProcessClient.CreateDefaultBinding();

<br>stringremoteAddress=MyProcessClient.EndpointAddress.Uri.ToString();

<br>remoteAddress=remoteAddress.Replace("localhost",“192.168.1.101”);

<br>EndpointAddressendpoint=newEndpointAddress(remoteAddress);

<br>MyProcessClientclient=newMyProcessClient(binding,endpoint);

<br>try

<br>{

<br>lbResult.Text=client.Add(a,b).ToString();

<br>}

<br>catch(Exceptionex)

<br>{

<br>MessageBox.Show(ex.Message);

<br>}

<br>}

<br>代码很短,不外很主要的一点是我们没有利用DeviceClient的默许机关器,我们把RemoteAddress中的”localhost”交换成了服务地点主机的IP(你能够在MyProcessClient类的找到响应的静态字段)。
点击menuCalculate我们看到以下的了局:
PC机上

<br>
设备上

<br>

下载完全代码

总结
从下面的例子我们看到,在WindowsMobile上构建一个WCF的使用程序并非太难,代码量也不年夜,只是我们短少响应的文档资本,大概本文能帮你勤俭一点上手的工夫。
但愿这篇漫笔能对人人有所匡助,只管它并没有对某些细节做分明的论述,可是信任您已可以依照文中的做法,在WindowsMobile上轻松构建出你本人的WCF程序,那末本文的目标也就到达了。
Regards

金色的骷髅 发表于 2015-1-20 19:58:55

培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。

愤怒的大鸟 发表于 2015-1-24 16:03:56

才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。

简单生活 发表于 2015-2-5 20:38:15

然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,

只想知道 发表于 2015-2-8 08:53:17

要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。

兰色精灵 发表于 2015-2-25 05:57:32

每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。

飘灵儿 发表于 2015-3-5 19:37:47

down下code4app网站的每个分类的代码挨着看

柔情似水 发表于 2015-3-12 12:08:46

开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦

若相依 发表于 2015-3-17 12:55:05

自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉

若天明 发表于 2015-3-20 15:47:55

重要的是,放眼全球也的确找不到第二个如苹果iOS平台这样健壮、完整、先进而且为开发者带来真实收益的开发平台来。

仓酷云 发表于 2015-3-21 07:10:14

AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。

深爱那片海 发表于 2015-4-4 16:00:28

看完这个你就可以有多种选择来踏入做应用的阶段

小魔女 发表于 2015-4-10 05:59:59

开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦

蒙在股里 发表于 2015-4-10 09:06:21

从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,

再见西城 发表于 2015-4-13 05:55:10

同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。

第二个灵魂 发表于 2015-4-14 06:44:47

然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,

因胸联盟 发表于 2015-4-20 18:45:25

看《iPhone 4与iPad开发基础教程》,跟着一步步来

小妖女 发表于 2015-4-21 19:21:11

然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,

不帅 发表于 2015-4-26 15:10:50

有办法利用自己手头的电脑立刻开始这个美妙旅程的。

精灵巫婆 发表于 2015-5-1 05:11:25

以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
页: [1]
查看完整版本: IOS设计WCF for .NET CF疾速进门仓酷云