0

これはおなじみの投稿のように聞こえるかもしれませんが、ローカル IIS でホストされている ASP.NET WebApp から、ローカル IIS でホストされている WCF サービスを呼び出そうとしています。ローカル Web アプリは、以下の AJAX 呼び出しから .svc ファイルを正常に "呼び出す" ことができますが、/GetData?value=2 を追加するとすぐに、404 エラーが発生し始めます。

WCF サービスと Web アプリの両方が IIS7 の localhost でホストされているため、クロスドメインの問題が発生することはありません。

この同じ質問が約 1 億回聞かれていることをお詫びします。私はそれを機能させようとしている単なる WCF 初心者ですが、どんな助けも大歓迎です。私はグーグルで約1日さまざまなことを試してきましたが、ついに提出しました。

ありがとう、ジェイソン

これが私のサービス契約です:

namespace WcfService1
{
    // 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]
        [WebInvoke(Method="GET", ResponseFormat=WebMessageFormat.Json)]
        string GetData(int value);

        [OperationContract]
        CompositeType GetDataUsingDataContract(CompositeType composite);

        // TODO: Add your service operations here
    }


    // Use a data contract as illustrated in the sample below to add composite types to service operations.
    [DataContract]
    public class CompositeType
    {
        bool boolValue = true;
        string stringValue = "Hello ";

        [DataMember]
        public bool BoolValue
        {
            get { return boolValue; }
            set { boolValue = value; }
        }

        [DataMember]
        public string StringValue
        {
            get { return stringValue; }
            set { stringValue = value; }
        }
    }
}

サービスの実装は次のとおりです。

namespace WcfService1
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 : IService1
    {
        public string GetData(int value)
        {
            return string.Format("You entered: {0}", value);
        }

        public CompositeType GetDataUsingDataContract(CompositeType composite)
        {
            if (composite == null)
            {
                throw new ArgumentNullException("composite");
            }
            if (composite.BoolValue)
            {
                composite.StringValue += "Suffix";
            }
            return composite;
        }
    }
}

サービス web.config は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="default">
          <!-- 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="false" />
        </behavior>
      </serviceBehaviors>
        <endpointBehaviors>
            <behavior name="httpEndPoint">
                <webHttp />
                <!--<enableWebScript />-->
            </behavior>
        </endpointBehaviors>
    </behaviors>
      <services>
          <service behaviorConfiguration="default" name="Service">
              <endpoint address="" binding="webHttpBinding" contract="WcfService1.IService1" behaviorConfiguration="httpEndPoint"></endpoint>
              <endpoint address="mex" binding="webHttpBinding" contract="IMetadataExchange" behaviorConfiguration="httpEndPoint"></endpoint>
          </service>
      </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
        <defaultDocument>
            <files>
                <add value="Service1.svc" />
            </files>
        </defaultDocument>
  </system.webServer>

</configuration>

これが私のAJAX呼び出しです:

    $(document).ready(
        function()
        {
            $.ajax(
                {
                    type: "GET",
                    url: "http://localhost/testservice/GetData?value=2",
//                    contentType: "application/json; charset=utf-8",
//                    DataType: "jason",
                    success: function() { alert("success"); },
                    error: function(result) { alert(result.status + " " + result.statusText); }
                }
            );
        }
    );
4

1 に答える 1

0

config の webHttp タグにより、残りのサービスのセットアップが完了しました。

それ以外の

http://localhost/testservice/GetData?value=2

行う

http://localhost/testservice/GetData/2
于 2012-09-08T00:22:34.193 に答える