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>

前端还有几个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>
后端代码
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; }
        }
    }

}
遗留问题
messagecontract
WCF是怎么序列化,反序列化消息的
一切消息的基类Message的成员

总结:这样搞WCF不是方法,应该系统的学医下
posted @ 2009-04-06 13:26  liulun  阅读(1450)  评论(1编辑  收藏  举报