Ajax 호출 RESTful WCF
svc 뒤에
Factory="System.ServiceModel.Activation.WebServiceHostFactory
먼저 인터페이스 파일:
[ServiceContract]
public interface ITestWCF
{
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "DoWork")]
bool DoWork();
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "WebInvokeWithNoArgs", Method = "POST")]
ReturnObj WebInvokeWithNoArgs();
[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json, RequestFormat =WebMessageFormat.Json,BodyStyle =WebMessageBodyStyle.WrappedRequest, UriTemplate = "WebInvokeWithArgs", Method = "POST")]
ReturnObj WebInvokeWithArgs(string str);
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "WebGetWithNoArgs")]
ReturnObj WebGetWithNoArgs();
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, UriTemplate = "WebGetWithArgs/{str}")]
ReturnObj WebGetWithArgs(string str);
}
그리고 실현 파일.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TestWCF : ITestWCF
{
public bool DoWork()
{
return true;
}
public ReturnObj WebGetWithArgs(string str)
{
return new ReturnObj(str);
}
public ReturnObj WebGetWithNoArgs()
{
return new ReturnObj("Get Success!");
}
public ReturnObj WebInvokeWithArgs(string str)
{
return new ReturnObj(str);
}
public ReturnObj WebInvokeWithNoArgs()
{
return new ReturnObj("Invoke Success!");
}
}
WebInvoke 와 WebGet 의 차 이 를 설명 하면 하 나 는 POST 이 고 하 나 는 GET 로 이해 할 수 있다.하지만 WebInvoke 의 Method 는 GET 일 수도 있 습 니 다. WebGet 은 Get Response Format = WebMessage Format. JSon 일 수 있 습 니 다. 이것 이 Response 일 때 JSon 방식 으로 UriTemplate 를 사용 합 니 다. 이것 은 UriTemplate = "WebInvoke With NoArgs" 와 같은 주 소 를 이해 할 수 있 습 니 다.http://xxx.xxx.xxx/xxx.svc/WebInvokeWithNoArgs 방문 하 러 왔 습 니 다.Method 가 GET 이 고 인자 가 있 을 때 UriTemplate = "방법 주소 / {매개 변수} / {매개 변수}" 방식 으로 WCF 에 매개 변 수 를 전달 할 수 있 습 니 다.물론 POST 는 제 이 슨 이 라 고 솔직하게 쓰 세 요 ~ Body Style = WebMessage Body Style. Wrapped Request 이것 은 포장 Request 입 니 다. 이 필 자 는 구체 적 인 기능 도 알 지 못 했 습 니 다. 다만 이 말 이 없 을 때 ajax 가 돌아 온 status 를 200 으로 더 하면 됩 니 다.Body Style = WebMessage Body Style. Wrapped Response 이것 은 포장 Response 입 니 다. 바로 ajax 가 JSon 을 받 았 을 때 {"WebInvoke With NoArgs Result": {"str": "Invoke Success!"} (있 습 니 다) {"str": "Invoke Success!"} (없 음) WebMessage Body Style 그리고 두 개 는 Bare 와 Wrapped 입 니 다.Bare 는 전혀 포장 하지 않 고 Wrapped 는 둘 다 포장 합 니 다.
그리고 전송 클래스:
[DataContract]
public class ReturnObj
{
[DataMember(Order = 0)]
public string str;
public ReturnObj(string args)
{
str = args;
}
}
json 에 필드 를 추가 하려 면 DataMember 로 표시 합 니 다.DataMember 를 추가 하지 않 으 면 json 에 서 는 이 필드 가 보이 지 않 습 니 다!그리고 보 이 는 지 여 부 는 private Public 와 무관 합 니 다.Order 가 json 으로 바 뀌 었 을 때 필드 의 순서 입 니 다.Order 가 있 을 때 작은 게 앞 에 있어 요.
[DataMember(Order = 0)]
private string str;
[DataMember(Order = 1)]
public int num;
[DataMember(Order = 2)]
public bool ok;
결 과 는 {"str": "Invoke Success!", "num": 1, "ok": true} 그리고 Order 를 추가 하지 않 은 것 같 습 니 다. Order 앞 에 있 는 것 같 습 니 다.
기본 유형 (예 를 들 어 bool 같은 것) 이 고 포장 Response 를 선택 하지 않 았 을 때 단순 한 값 이 며 json 형식 이 없습니다.
그리고 프로필.
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="TestWCFBehavior">behavior>
endpointBehaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
behavior>
serviceBehaviors>
behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="TestWCF">
<endpoint address="" behaviorConfiguration="TestWCFBehavior" binding="webHttpBinding" contract="ITestWCF">endpoint>
service>
services>
system.serviceModel>
설정 파일 은 빠 진 것 이 있 는 지 없 는 지 를 진지 하 게 검사 해 야 합 니 다. 설정 파일 이 잘못 썼 기 때문에 서비스 가 아니면 바로 끊 으 면 접근 할 수 없습니다.
그리고 어떻게 Ajax 로 WCF 를 호출 했 는 지...jQuery 를 사용 하면 $. ajax () POST:
$.ajax({
url: "../TestWCF.svc/WebInvokeWithArgs",
type: "POST",
contentType: "text/json",
asnyc: "false",
data: '{"str":"Invoke Test"}',
dataType: 'json',
success: function (resultObj) {
var resultStr = String(JSON.stringify(resultObj));
alert(resultStr);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
GET
$.ajax({
url: "TestWCF.svc/WebGetWithArgs/Get Test",
type: "Get",
asnyc: false,
dataType: 'json',
success: function (resultObj) {
var resultStr = String(JSON.stringify(resultObj));
alert(resultStr);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
url 이 세 글 자 는 대문자 로 쓰 면 안 됩 니 다 - |
하면, 만약, 만약...
<script type="text/javascript">
var xmlHttp;
// IE ajax
function createxmlHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
//POST
function doPost() {
var url = "TestWCF.svc/WebInvokeWithArgs";
var data = '{"str":"Invoke Test"}';// json
createxmlHttpRequest();
xmlHttp.open("POST", url, false);//open( , , )
xmlHttp.setRequestHeader("Content-Type", "text/json");
xmlHttp.onreadystatechange = function () {
if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) {
alert(xmlHttp.responseText);
}
else {
alert(xmlHttp.status);
}
}
xmlHttp.send(data);
return false;
}
//GET
function doGet() {
var url = "TestWCF.svc/WebGetWithNoArgs";
createxmlHttpRequest();
xmlHttp.onreadystatechange = function () {
if ((xmlHttp.readyState == 4) && (xmlHttp.status == 200)) {
alert(xmlHttp.responseText);
}
else {
alert(xmlHttp.status);
}
}
xmlHttp.open("GET", url, false);
xmlHttp.send("");
return false;
}
script>
onreadystatechange 의 처리 함 수 를 설정 하고 send 를 하면 됩 니 다.
C \ # 클 라 이언 트 에 대해 서 는 WebHttpRequest 와 WebHttpResponse 로 GET 를 처리 할 수 있 습 니 다.
static void Main(string[] args)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:65143/testwcf.svc/WebGetWithNoArgs");
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
Console.WriteLine(sr.ReadToEnd());
}
POST
static void Main(string[] args)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:65143/testwcf.svc/WebInvokeWithArgs");
req.Method = "POST";
req.ContentType = "application/json";
string data = @"{""str"":""From C#""}";
byte[] SendData = Encoding.Default.GetBytes(data);
req.ContentLength = SendData.Length;
req.GetRequestStream().Write(SendData, 0, SendData.Length);
req.GetRequestStream().Close();
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
Console.WriteLine(sr.ReadToEnd());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
브 라 우 저의 동시 다발 요청 세그먼트 에 100 MB 파일 을 업로드 하고 MD5 세 션 인증 과 정지점 전송 을 추가 합 니 다.이 기능 의 실현 에 참여 하 는 것 은 주로 전단 1 명 과 본인 을 포함한다. 대체적으로 논 리 를 실현 합 니 다. 저 는 여기 서 간단 한 정 리 를 하 겠 습 니 다. (본인 의 언어 조직 능력 이 부족 하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.