Visual Studio2010WCFプロジェクトで機能する次のコードがあります。
ただし、Visual Studio 2008でプロジェクトを再作成すると、プロジェクトが機能せず、次のエラーStatuesText "UnsupportedMediaType"のみが表示されました。
編集:
私が理解したのは、問題はVisual Studio 2010プロジェクトと2008プロジェクトで異なるため、Web.configファイルにあるということです。したがって、すべてのWeb.configを質問に追加しました。
soapを使用してWCFサービスを呼び出すjavascriptは次のとおりです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="jQuery/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="jQuery/jquery.xml2json.js"></script>
<script type="text/javascript" src="jQuery/json2.js"></script>
<script type="text/javascript">
function MyRequest() {
debugger;
var methodName = "GetData"
var responseTagName = methodName + "Response";
var resultTagName = methodName + "Result";
var sendData = "";
sendData += '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">';
sendData += ' <s:Body>';
sendData += ' <' + methodName + ' xmlns="http://tempuri.org/">';
sendData += ' <name>Shlomy</name>';
sendData += ' </' + methodName + '>';
sendData += ' </s:Body>';
sendData += '</s:Envelope>';
var response = $.ajax({
type: "POST",
contentType: "text/xml; charset=utf-8",
methodName: methodName,
url: "http://localhost:16109/Service1.svc",
data: sendData,
async: false,
beforeSend: function (req, methodName) {
var soapActionURI = "http://tempuri.org/IService1/GetData";
req.setRequestHeader("SOAPAction", soapActionURI);
},
success: function (xml, type, xhr) {
var result = $(xml).find(resultTagName);
var resultjson = $.xml2json(result);
successHandler(xml.text);
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
alert(xmlHttpRequest.responseText);
}
});
}
function successHandler(soapResult) {
alert(soapResult);
}
</script>
</head>
<body>
<input type="button" onclick="MyRequest()" value="Call WCF via AJAX" />
</body>
</html>
また、WCFサービス(HelloWorldWCFService)は次のとおりです
。Service1.svc:
<%@ ServiceHost Language="C#" Debug="true" Service="HelloWorldWCFServiceLibrary.Service1" %>
<%@ Assembly Name="HelloWorldWCFServiceLibrary" %>
WCF Web.Config:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="debug">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="HelloWorldWCFServiceLibrary.Service1" behaviorConfiguration="debug" >
<endpoint address="mex" binding="wsHttpBinding" contract="HelloWorldWCFServiceLibrary.IService1" />
</service>
</services>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
また、WCFライブラリ(HelloWorldWCFServiceLibrary)は次のとおりです
。IService.cs:
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
[OperationContract]
string GetData(string name);
}
Service1.cs:
public class Service1 : IService1
{
public string GetData(string name)
{
return "WCFSoapTest";
}
}
私は数日間、2008年のソリューションと2010年のソリューションの違いと、2010年のプロジェクトだけが機能する理由を理解しようとしました。しかし、役に立たない。助言がありますか ?
ありがとう。