0

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年のプロジェクトだけが機能する理由を理解しようとしました。しかし、役に立たない。助言がありますか ?

ありがとう。

4

1 に答える 1

1

ネットを掘り下げて動作させることができました。
理由は思ったとおりです-Web.configファイル
違いは、Visual Studio 2010ではプロジェクトが.Net4.0で作成されたのに対し、VisualStudio2008では.Net3.5でプロジェクトが作成されたということ
です。 Net4.0は、.Net3.5で生成されたものとは異なり
ます。必要なのは、WCFサービスがSOAPで動作するように、「basicHttpBinding」を使用して「エンドポイント」をサービスに追加することでした。

<services>
   <service name="HelloWorldWCFServiceLibrary.Service1" behaviorConfiguration="debug2">
        <endpoint address="" binding="basicHttpBinding" contract="HelloWorldWCFServiceLibrary.IService1"/>
   </service>
</services>

このリンクのおかげでこの情報を見つけました
私の新しいWeb.configファイルは次のとおりです:

    <?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>
  </configSections>
  <system.web>
    <compilation debug="true">
      <assemblies>
        <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <pages>
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      </controls>
    </pages>
    <httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpHandlers>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="debug2">
          <!-- 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>
      <!--<endpointBehaviors>
                <behavior name="HelloWorldWCFService.AjaxAspNetAjaxBehavior"/>
            </endpointBehaviors>-->
    </behaviors>
    <!--<serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>-->
    <services>
      <service name="HelloWorldWCFServiceLibrary.Service1" behaviorConfiguration="debug2">
        <!--<endpoint address="" binding="wsHttpBinding" contract="HelloWorldWCFServiceLibrary.IService1"/>-->
        <endpoint address="" binding="basicHttpBinding" contract="HelloWorldWCFServiceLibrary.IService1"/>
      </service>
    </services>
  </system.serviceModel>
  </configuration>

助けてくれた人に感謝します!

于 2012-10-10T16:43:12.450 に答える