未找到WCF端点/使用Windows服务不允许的方法

问题描述:

我想在Windows服务上托管我的WCF Web服务,以便前端可以访问这些方法。未找到WCF端点/使用Windows服务不允许的方法

如果我点击VS中的服务(在浏览器中查看),服务运行良好。但是,当我厌倦了使用Windows服务来托管它时,当我使用基地址和“Method Not Allow”时,它从浏览器返回“Endpoint not found”。当我指定要访问的方法时。

下面是我的代码: 主机的App.Config中:

<?xml version="1.0" encoding="utf-8" ?> 
 
<configuration> 
 
\t <startup> 
 
\t \t <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /> 
 
\t </startup> 
 
\t <system.serviceModel> 
 
\t \t <behaviors> 
 
\t \t \t <serviceBehaviors> 
 
\t \t \t \t <behavior name="mexBehavior"> 
 
\t \t \t \t \t <serviceMetadata httpGetEnabled="true" /> 
 
\t \t \t \t </behavior> 
 
\t \t \t </serviceBehaviors> 
 
\t \t \t <endpointBehaviors> 
 
\t \t \t \t <behavior name="jsonBehavior"> 
 
\t \t \t \t \t <webHttp defaultOutgoingResponseFormat="Json" /> 
 
\t \t \t \t </behavior> 
 
\t \t \t </endpointBehaviors> 
 
\t \t </behaviors> 
 
\t \t <services> 
 
\t \t \t <service behaviorConfiguration="mexBehavior" name="BestWebService.Service1"> 
 
\t \t \t \t <host> 
 
\t \t \t \t \t <baseAddresses> 
 
\t \t \t \t \t \t <add baseAddress="http://localhost/Service1.svc"/> 
 
\t \t \t \t \t </baseAddresses> 
 
\t \t \t \t </host> 
 
\t \t \t \t <endpoint address="" binding="webHttpBinding" behaviorConfiguration="jsonBehavior" 
 
\t \t \t \t \t \t contract="BestWebService.IService1" 
 
\t \t \t \t \t \t bindingConfiguration="jsonBinding"> 
 
\t \t \t \t \t <identity> 
 
\t \t \t \t \t \t <dns value="localhost" /> 
 
\t \t \t \t \t </identity> 
 
\t \t \t \t </endpoint> 
 
\t \t \t </service> 
 
\t \t </services> 
 
\t \t <bindings> 
 
\t \t \t <webHttpBinding> 
 
\t \t \t \t <binding name="jsonBinding"> 
 
\t \t \t \t \t <security mode="None"> 
 
\t \t \t \t \t \t <transport clientCredentialType="None"/> 
 
\t \t \t \t \t </security> 
 
\t \t \t \t </binding> 
 
\t \t \t </webHttpBinding> 
 
\t \t </bindings> 
 
\t </system.serviceModel> 
 
</configuration>

Service.cs

 protected override void OnStart(string[] args) 
 
     { 
 
      if (host != null) { 
 
       host.Close(); 
 
      } 
 
      try 
 
      { 
 
       host = new ServiceHost(typeof(BestWebService.Service1)); 
 
       host.Open(); 
 
      } 
 
      catch (Exception e) { 
 
       string stored = @"c:\\SETUP ERROR.txt"; 
 
       using (StreamWriter sw = File.AppendText(stored)) 
 
       { 
 
        sw.WriteLine("1: {0}", e.ToString()); 
 
       } 
 
       host.Close(); 
 
      } 
 
     }

WCF服务接口

public interface IService1 
 
    { 
 

 
     [OperationContract] 
 
     [WebInvoke(Method = "POST", 
 
     ResponseFormat = WebMessageFormat.Json, 
 
     RequestFormat =WebMessageFormat.Json)] 
 

 
     List<WKSTEnviornment> GetWKSTDetails(); 
 
    }

的Javascript

getAllVersions = function (id) { 
 
\t $.ajax({ 
 
\t \t url: 'http://localhost/Service1.svc/GetWKSTDetails', 
 
\t \t method: 'post', 
 
\t \t contentType: 'application/json; charset=utf-8', 
 
\t \t dataType: 'json', 
 
\t \t success: function (data) { 
 
\t \t \t var verlist = new Array(); 
 
\t \t \t var appname = new Array(); 
 
\t \t \t var applications = new Array(); 
 
\t \t \t var name = null; 
 
\t \t \t var Object = {}; 
 
\t \t \t $.each(data.d, function (i) { 
 
\t \t \t \t var apps = data.d[i]["AppList"].split('_'); 
 
\t \t \t \t verlist.push(data.d[i]["Version"]); 
 
\t \t \t \t $.each(apps, function (i) { 
 
\t \t \t \t \t appname.push(apps[i]); 
 
\t \t \t \t }) 
 
\t \t \t \t appname.sort(); 
 
\t \t \t \t var ver = data.d[i]["Version"]; 
 
\t \t \t \t Object[ver] = { Date: data.d[i]["Date"], Applist: appname }; 
 
\t \t \t \t appname = []; 
 
\t \t \t }); 
 
\t \t \t versionlist = Object; 
 
\t \t \t getversion = true; 
 
\t \t \t createDeployPanel(Object, verlist, id); 
 
\t \t }, 
 
\t \t error: function (data) { 
 
\t \t \t alert(JSON.stringify(data) + 'Get Versions Failed'); 
 
\t \t } 
 
\t }); 
 
}

谢谢!

+0

Z IService1没有装饰[ServiceContract]属性..你可以检查它吗? –

+0

这是,我忘了包括该行 –

我无法弄清楚这个问题与Windows服务(服务托管成功寿),所以我把它切换到IIS(配置和CORS也花了一些时间来解决),现在它的工作:)