WCF for .NET CF的一个应用及两个困惑的问题
头段时间看了fox23的两篇 WCF Mobile的文章,就自己动手做了简单的日志填写程序,就是一张数据表,可以记录某日几点到几点做了哪些工作,公司规定每天都要填写。程序结构如下:
服务器端:
- Foolish.CMIS.Service
- Foolish.CMIS.WCFHost
客户端:
- WorkLog4Mobile
具体步骤为:
- 新建一个WCF项目,命名为Foolish.CMIS.Service,然后定义一个服务的接口
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace Foolish.CMIS.Service { [ServiceContract] public interface IWorkLogService { [OperationContract] List<LM_WORKLOG> getWorkLog(DateTime aStartDate, DateTime aEnddate, string aLogType, string aUserID); [OperationContract] LM_WORKLOG SaveWorkLog(LM_WORKLOG worklog); [OperationContract] void DeleteWorkLog(LM_WORKLOG worklog); [OperationContract] bool isLogin(string userName, string passWord); } }
2.实现接口,利用linq,所以数据库访问实现起来很简单,配置一下,把表一拖,就ok了
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Runtime.InteropServices; namespace Foolish.CMIS.Service { public class WorkLogService : IWorkLogService { [DllImport("libPassChk.dll")] public static extern Boolean IsValidPassword(String APass, String APassEncoded); public List<LM_WORKLOG> getWorkLog(DateTime aStartDate, DateTime aEnddate, string aLogType, string aUserID) { BusinessDataClassesDataContext db = new BusinessDataClassesDataContext(); if (aLogType.Equals("")) { var query = from wl in db.LM_WORKLOGs where (wl.FillPeople == aUserID) && (wl.LogDate < aEnddate) && (wl.LogDate > aStartDate) orderby wl.LogDate descending select wl; return query.ToList<LM_WORKLOG>(); } else { var query=from wl in db.LM_WORKLOGs where wl.FillPeople==aUserID && wl.LogDate<aEnddate && wl.LogDate>aStartDate && wl.Guide_id==aLogType select wl; return query.ToList<LM_WORKLOG>(); } } #region IWorkLogService public LM_WORKLOG SaveWorkLog(LM_WORKLOG worklog) { BusinessDataClassesDataContext db = new BusinessDataClassesDataContext(); if (worklog.Log_id.Equals("")) { db.LM_WORKLOGs.InsertOnSubmit(worklog); } else { db.LM_WORKLOGs.Attach(worklog, true); } db.SubmitChanges(); return worklog; } #endregion #region IWorkLogService public void DeleteWorkLog(LM_WORKLOG worklog) { BusinessDataClassesDataContext db = new BusinessDataClassesDataContext(); db.LM_WORKLOGs.Attach(worklog, true); db.LM_WORKLOGs.DeleteOnSubmit(worklog); db.SubmitChanges(); } #endregion #region IWorkLogService public bool isLogin(string userName, string passWord) { UserInfoDataClassesDataContext userDB = new UserInfoDataClassesDataContext(); IEnumerable<string> userPassQry = from orgatt in userDB.TORGATTRIBUTEs where orgatt.FID == "PASSWORD" && (from psn in userDB.TPERSONs where psn.FID == userName select psn.FGUID).Contains(orgatt.FGUID) select orgatt.FVALUE; foreach (string userPass in userPassQry) { return IsValidPassword(passWord, userPass); } return false; } #endregion } }
这个简单的服务就算实现了
3、新建一个web项目,引用Foolish.CMIS.Service这个wcf服务,其实就是给他找了个IIS作为宿主,需要注意的是要把刚才wcf服务配置文件中关于数据库连接及WCF的配置文件拷到webconfig里面,需要把wshttpbinding改为basicHttpBinding,因为WCF cf只支持BasicHttpBinding和WindowsMobileMailBinding两种方式,还有要加入<serviceMetadata httpGetEnabled="true" />,使netcfSvcUtil.exe可以访问。然后新建一个文件WorkLog.svc,内容如下:
<%@ ServiceHost Language="C#" Debug="true" Service="Foolish.CMIS.Service.WorkLogService" %>
ok,服务及Hosting都已经成功,服务端已经完成了,现在可以在浏览器中输入http:\\localhost\worklog\WorkLog.svc测试一下。
4、客户端应用,首先需要使用netcfSvcUtil.exe工具生成一些代码
netcfSvcUtil.exe http:\\localhost\worklog\WorkLog.svc
注意这一步尽量要把vs关掉,我在没关掉的情况下老是报错,走了不少弯路
生成了两个文件CFClientBase.cs/WorkLogService.cs,新建一个智能设备项目引入这两个文件就ok了。
下面是使用wcf服务的代码,照抄了fox23的代码
System.ServiceModel.Channels.Binding binding = WorkLogServiceClient.CreateDefaultBinding(); string remoteAddress = WorkLogServiceClient.EndpointAddress.Uri.ToString(); EndpointAddress endpoint = new EndpointAddress(remoteAddress); WorkLogServiceClient client = new WorkLogServiceClient(binding, endpoint); logList = client.getWorkLog(startDate, endDate, "", txtUserName.Text);
简单的四步一个应用就完成了。在我的P800连上PC后测试正常。但是发布到公网上后用手机WAP方式接入后就报错了。下面就是我困惑的两个问题
(其实我写这么多,也就是为了有希望能混到首页上,这样让牛人们说不定能看到我的问题,写的是流水账方式,污染了大家眼睛,不好意思了,呵呵。)
错误如下:
响应消息的内容类型application/vnd.wap.wmlc;charset=utf-8与绑定的内容类型(text/xml;chartset=utf-8)不匹配。如果使用自定义编码器,
请确保正确实现IsContextTypeSupported方法。
网上搜索了一把,也没找到相关类似的问题,所以只能发布到这里看看有没有谁知道怎么搞的了。
下面是我的想法:
1、用netcfsvcutil怎么指定生成消息绑定内容为application/vnd.wap.wmlc,如果生成了这种格式,是不是就不能序列化了
2、我在网上搜了半天,也没发现IsContextTypeSupported方法的介绍,不知道具体改怎么实现呢
我觉得第二种可能是解决问题的办法
转载于:https://www.cnblogs.com/sss/archive/2008/07/16/1244158.html
WCF for .NET CF的一个应用及两个困惑的问题相关推荐
- 利用WCF的callback机制开发一个简单的多人游戏模型
本文介绍了如何利用WCF和callback机制开发一个简单的多人在线游戏模型. 运行过程如下: 当game service 启动之后,若干个客户端便会自动连接到服务器.当某个客户端点击join gam ...
- WCF 第一章 基础 完成一个WCF服务客户端
当需要和服务通信时WCF为客户端提供了丰富的API.通过Service.ServiceModel实现的API处理将.NET类型转换成XML然后从客户端向服务端发送消息.你可以直接用API编程,或者你可 ...
- phpstudy一个域名配置两个网站(一个是thinkphp5,一个是原生php)
phpstudy一个域名配置两个网站(一个是thinkphp5,一个是原生php) 一.总结 一句话总结:把原生php的网站直接放到thinkphp5的public目录下可以解决以stem.aaaa. ...
- [问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题
[问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题 参考文章: (1)[问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题 (2)ht ...
- java提交数据到另一个页面_JS实现把一个页面层数据传递到另一个页面的两种方式...
由于之前面试,被问到过此问题,所以今天特意整理了一下.由于自己技术水平有限,若存在错误,欢迎提出批评. 本博客整理了两种方式从一个页面层向另一个页面层传递参数. 一. 通过cookie方式 1. 传递 ...
- android 多个dialog 交替显示,Android如何在一个AlertDialog中一个接一个地显示两个ListViews...
我有两个列表.一个列表显示可用列表中的所有可用项目(lv_available_items)和仅次要项目(lv_selected_items).我还希望该选定列表最多占用显示的50%,因此我使用属性&q ...
- Oracle中用一个序列给两个表创建主键自增功能的后果
前几天在创建数据表时,想偷个懒,使用一个序列给两个表创建主键自增功能,结果...... 情景: 为宠物中心创建一个简单的数据库,要求如下: 1.创建一个主人表,字段:主人编号,主人姓名,主人性别,主人 ...
- 一个按钮触发两个事件可以吗?
问: 我想让一个按钮触发两个事件,submit1_click 和submit2_click()可以吗?怎么设?先执行submit1_click,再接着执行submit2_click.是再OnClick ...
- 谷歌浏览器怎么重发请求_chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常...
调查一个 pdf 打印报错: ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.net.Sock ...
最新文章
- jquery上传图片
- Codeforces 432D Prefixes and Suffixes (KMP、后缀数组)
- 《数据库SQL实战》获取所有部门当前manager的当前薪水情况
- ejabberd登陆不成功的解决方案
- 学习笔记(56):Python实战编程-Menu
- P4424-[HNOI/AHOI2018]寻宝游戏【结论】
- 放苹果(信息学奥赛一本通-T1222)
- Markdown编辑LaTeX数学公式
- Ehcache整合spring配置
- java 内存分布_java的各类型数据在内存中分配情况详解_
- linux中/etc/fstab文件删除或修改了,导致系统无法启动
- php小刀娱乐网源码,PHP精仿小刀娱乐网资源下载站网站整站源码
- 致远OA A8 漏洞综合工具
- Android仿微信朋友圈发布动态
- ballerina 学习二十七 项目k8s部署 运行
- 毕业论文中的“自动生成目录”设置(经验四)
- jenkins 配置git
- 西安100w就可以财务自由?靠工资如何崛起!
- java判断是否已数字结尾,正则表达式测试字符串是否以数字结尾
- Imageware NX V12.1最好的逆向工程软件之一,Surfacer的最新版本
热门文章
- 5G NR — 国内运营商的频段和带宽划分
- 互联网协议 — TLS 传输层安全协议
- 架构师之路 — 部署架构 — 高可用集群 — 主备 HA 系统中的脑裂问题
- Openstack组件部署 — keystone(domain, projects, users, and roles)
- Windwos 08R2_DNS全面图文详解
- DRV8711总是报Pre-driver fault错误原因与处理方法
- STM32堆栈大小及位置
- NR 5G UE和5G网络功能之间的安全流程
- Django使用Social-Auth实现微信第三方网站扫码登录
- windows charles response 乱码解决办法