2017-07-31 33 views
0

我想在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

這是,我忘了包括該行 –

回答

0

我無法弄清楚這個問題與Windows服務(服務託管成功壽),所以我把它切換到IIS(配置和CORS也花了一些時間來解決),現在它的工作:)

相關問題