Endpoint not found - WCF web service

前端 未结 1 1171
一整个雨季
一整个雨季 2020-12-31 07:41

I have created 2 endpoints for my WCF service.

It is working fine with basicHttpBinding but causes error for webHttpBinding.

Error

相关标签:
1条回答
  • 2020-12-31 07:43

    I have created a similar service as the one that you have according to this:

     [ServiceContract]
    public interface IService
    {
        [OperationContract]
        [WebInvoke(UriTemplate="/CallADSWebMethod", Method="POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
        string CallADSWebMethod(string vin, string styleID);
    }
    

    The important thing that I added was the UriTemplate part that tells the service how the call should look like. I then implemented this service as:

    public class Service : IService
    {
        public string CallADSWebMethod(string vin, string styleID)
        {
            return vin + styleID;
        }
    }
    

    and in my web.config I have the following:

    <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="Description7aBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="asmx" name="WebApplication1.Service">
        <endpoint address="basic" binding="basicHttpBinding" name="httpEndPoint" contract="WebApplication1.IService"/>
        <endpoint address="json" binding="webHttpBinding" behaviorConfiguration="webBehavior" name="webEndPoint" contract="WebApplication1.IService"/>
        <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
      </service>
    </services>
    <behaviors>
        <endpointBehaviors>
            <behavior name="webBehavior">
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
        <behavior name="asmx">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
    

    I have then created a simple page that looks like this that calls this service using jQuery:

        <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    <!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 runat="server">
        <title></title>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#Ok").click(function () {
                    var jData = {};
                    jData.vin = "one";
                    jData.styleID = "test";
                    $.ajax({
                        type: "POST",
                        url: "/Service.svc/json/CallADSWebMethod",
                        data: JSON.stringify(jData),
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (msg) {
                            alert(msg);
                        },
                        error: function (jqXHR, textStatus, errorThrown) {
                            alert(textStatus);
                        }
                    });
                });
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <input type="button" id="Ok" name="Ok" value="Ok" />
        </div>
        </form>
    </body>
    </html>
    

    and this produces a alert with the text onetest. Hope this can give som guidance.

    0 讨论(0)
提交回复
热议问题