javascript post数据到WCF反馈json或者XML
前端代码:
<script language="javascript" type="text/javascript">
//创建XMLHTTP
function createXMLHTTP(){
var httpRequest;
try {
httpRequest = new XMLHttpRequest();
}
catch (e) {
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
return null;
}
}
}
return httpRequest;
}
//构造XML格式的文本
function createXML(){
var id = document.getElementById("id").value;
var title = document.getElementById("title").value;
var content = document.getElementById("content").value;
var xml = '<?xml version="1.0" encoding="utf-8" ?>';
xml+='<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">';
xml+='<soap:Body>';
xml+='<XmlService xmlns="http://tempUri.org/">';
//var xml = '';
xml+='<id type="number">'+id+'</id>';
xml+='<mytitle type="string">'+title+'</mytitle>';
xml+='<mycontent type="string">'+content+'</mycontent>';
xml+='</XmlService></soap:Body></soap:Envelope>';
return xml;
}
//构造JSON字符串
function createJSON(){
var id = document.getElementById("id").value;
var title = document.getElementById("title").value;
var content = document.getElementById("content").value;
var json = '{"id":'+id+',"mytitle":"'+title+'","mycontent":"'+content+'"}';
return json;
}
//异步调用服务器
function callServer(postType) {
var xmlHttp =createXMLHTTP();
if (xmlHttp == null) {alert('浏览器不支持ajax');return;}
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 4) {callBack(xmlHttp.responseText)}
}
var body;
var contentType;
var url;
if(postType == 'json'){
body = createJSON();
contentType = "application/json";
url = "/JsonXmlService.svc/JsonService";
}
if(postType == 'xml'){
body = createXML();
contentType = "text/xml";
url = "/JsonXmlService.svc/XmlService";
}
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", contentType);
xmlHttp.send(body);
}
//回调事件
function callBack(responseText){
alert(responseText);
}
</script>
//创建XMLHTTP
function createXMLHTTP(){
var httpRequest;
try {
httpRequest = new XMLHttpRequest();
}
catch (e) {
try {
httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
try {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
return null;
}
}
}
return httpRequest;
}
//构造XML格式的文本
function createXML(){
var id = document.getElementById("id").value;
var title = document.getElementById("title").value;
var content = document.getElementById("content").value;
var xml = '<?xml version="1.0" encoding="utf-8" ?>';
xml+='<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">';
xml+='<soap:Body>';
xml+='<XmlService xmlns="http://tempUri.org/">';
//var xml = '';
xml+='<id type="number">'+id+'</id>';
xml+='<mytitle type="string">'+title+'</mytitle>';
xml+='<mycontent type="string">'+content+'</mycontent>';
xml+='</XmlService></soap:Body></soap:Envelope>';
return xml;
}
//构造JSON字符串
function createJSON(){
var id = document.getElementById("id").value;
var title = document.getElementById("title").value;
var content = document.getElementById("content").value;
var json = '{"id":'+id+',"mytitle":"'+title+'","mycontent":"'+content+'"}';
return json;
}
//异步调用服务器
function callServer(postType) {
var xmlHttp =createXMLHTTP();
if (xmlHttp == null) {alert('浏览器不支持ajax');return;}
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 4) {callBack(xmlHttp.responseText)}
}
var body;
var contentType;
var url;
if(postType == 'json'){
body = createJSON();
contentType = "application/json";
url = "/JsonXmlService.svc/JsonService";
}
if(postType == 'xml'){
body = createXML();
contentType = "text/xml";
url = "/JsonXmlService.svc/XmlService";
}
xmlHttp.open("POST", url, true);
xmlHttp.setRequestHeader("Content-type", contentType);
xmlHttp.send(body);
}
//回调事件
function callBack(responseText){
alert(responseText);
}
</script>
前端还有几个HTML控件
<div>
文章标题:<input type="text" id="title" /><br />
文章内容:<textarea rows="" cols="" id="content"></textarea>
<input type="hidden" id="id" value="1" /><br />
<input type="button" value="以JSON方式提交" onclick="callServer('json');" />
<input type="button" value="以XML方式提交" onclick="callServer('xml');" />
</div>
文章标题:<input type="text" id="title" /><br />
文章内容:<textarea rows="" cols="" id="content"></textarea>
<input type="hidden" id="id" value="1" /><br />
<input type="button" value="以JSON方式提交" onclick="callServer('json');" />
<input type="button" value="以XML方式提交" onclick="callServer('xml');" />
</div>
后端代码
using System;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.ServiceModel.Channels;
using System.Xml.Serialization;
using System.Xml;
using System.IO;
namespace JsonXmlWcf
{
[ServiceContract(Namespace = "")]
public interface IJsonXmlService
{
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
MyDataType JsonService(int id, string mytitle, string mycontent);
[OperationContract(Action="*")]
[WebInvoke(ResponseFormat = WebMessageFormat.Xml, RequestFormat=WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
Message XmlService(Message m);
}
public class JsonXmlService:IJsonXmlService
{
public MyDataType JsonService(int id,string mytitle,string mycontent)
{
return MyService(id, mytitle, mycontent, "以JSON形式传递");
}
public Message XmlService(Message m)
{
return m;
}
private MyDataType MyService(int id,string mytitle,string mycontent,string info)
{
MyDataType MyData = new MyDataType();
MyData.Id = id;
MyData.MyTitle = string.Format("{0}({1})", mytitle,info);
MyData.MyContent = mycontent;
return MyData;
}
}
[DataContract]
public class MyDataType
{
private int _id;
private string _mytitle;
private string _content;
[DataMember]
public int Id
{
get { return _id; }
set { _id = value; }
}
[DataMember]
public string MyTitle
{
get { return _mytitle; }
set { _mytitle = value; }
}
[DataMember]
public string MyContent
{
get { return _content; }
set { _content = value; }
}
}
}
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.ServiceModel.Channels;
using System.Xml.Serialization;
using System.Xml;
using System.IO;
namespace JsonXmlWcf
{
[ServiceContract(Namespace = "")]
public interface IJsonXmlService
{
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
MyDataType JsonService(int id, string mytitle, string mycontent);
[OperationContract(Action="*")]
[WebInvoke(ResponseFormat = WebMessageFormat.Xml, RequestFormat=WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
Message XmlService(Message m);
}
public class JsonXmlService:IJsonXmlService
{
public MyDataType JsonService(int id,string mytitle,string mycontent)
{
return MyService(id, mytitle, mycontent, "以JSON形式传递");
}
public Message XmlService(Message m)
{
return m;
}
private MyDataType MyService(int id,string mytitle,string mycontent,string info)
{
MyDataType MyData = new MyDataType();
MyData.Id = id;
MyData.MyTitle = string.Format("{0}({1})", mytitle,info);
MyData.MyContent = mycontent;
return MyData;
}
}
[DataContract]
public class MyDataType
{
private int _id;
private string _mytitle;
private string _content;
[DataMember]
public int Id
{
get { return _id; }
set { _id = value; }
}
[DataMember]
public string MyTitle
{
get { return _mytitle; }
set { _mytitle = value; }
}
[DataMember]
public string MyContent
{
get { return _content; }
set { _content = value; }
}
}
}
遗留问题
messagecontract
WCF是怎么序列化,反序列化消息的
WCF是怎么序列化,反序列化消息的
一切消息的基类Message的成员
总结:这样搞WCF不是方法,应该系统的学医下
总结:这样搞WCF不是方法,应该系统的学医下