簡體   English   中英

WCF REST服務網址

[英]WCF REST Service url

我在項目中創建了WCF REST樣式服務。 在開發中,我可以指定相對網址來訪問我的服務,

 jQuery.ajax({
        url: "/WebServices/AddressWebService.svc/GetCountry",
        datatype: "json",
        success: function (data) {

            jQuery.each(data.GetCountryResult, function (index, value) {

                //value.entityData.CountryGuid
                //value.entityData.CountryName
                $('#dataCountry').empty();
                $('#dataCountry').append('<option value="' + value.entityData.CountryGuid + '">' + value.entityData.CountryName + '</option>');




            });

        }

    });

當我使用根文件夾名稱c2c托管到IIS(具有端口81)時,我不再能夠訪問該服務

使用fire bug,我嘗試查看標題,我的相對URL(“ /WebServices/AddressWebService.svc/GetCountry)被追加到主機(localhost:81),但是虛擬文件夾名稱(c2c)沒有被追加。結果顯示文件未找到異常

如果我使用完整的合格網址(http:// localhost:81 / c2c / WebServices / AddressWebService.svc / GetCountry),則可以正常工作。

如果我使用的是合格的完整網址,那么在進入生產環境時將很難進行更改。 盡管我們可以使用全局變量來存儲webroot(在本例中為c2c)

是否有任何簡單的解決方案可以解決此問題,我還在配置文件中提供了基址

<system.serviceModel>


         </binding>
     </webHttpBinding>
 </bindings>
 <services>
     <service name="c2c.WebServices.AddressWebService" behaviorConfiguration="jsonBehavior">

         <host>
             <baseAddresses>
                 <add baseAddress="http://localhost:81/c2c"/>
             </baseAddresses>
         </host>         

     <endpoint address="" binding="webHttpBinding" bindingConfiguration="webmax" contract="c2c.WebServices.IAddressWebService" behaviorConfiguration="jsonendpointBehavior" />

     <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
     </service>
 </services> 

您需要獲得一個對調用ajax方法的相對URL。 通常我要做的是

$.ajax({ url: "<%=ResolveUrl("~/Services/Service.asmx/ServiceMethod") %>" });

(顯然,您需要設置其余的參數,而這必須在ASP .NET控件上(如頁面))。

但是,如果您沒有在頁面上吐出JavaScript,那將無法正常工作。 在這種情況下,您需要將Web服務的URL傳遞給JavaScript對象或命名空間,該對象在JavaScript包含文件中定義。 因此,您可能會有這樣的事情:

MyServiceMethodCaller.serviceUrl = "<%=ResolveUrl("~/Services/Service.asmx/ServiceMethod") %>";

在JavaScript包含文件中定義MyServiceMethodCaller命名空間的位置。 這樣,在包含文件中,您可以擁有:

var MyServiceMethodCaller = {
  serviceUrl: "",
  serviceMethod: function() {
    $.ajax({ url: this.serviceUrl });
  }
}

我認為這應該有效。 我還沒有在經過測試的可行示例中提出它,但是您可以理解它的要旨。

嘗試更改您的基本地址以使其帶有斜杠。 例如

         <baseAddresses>
             <add baseAddress="http://localhost:81/c2c/"/>
         </baseAddresses>

在你的整個網站/c2c/虛擬路徑本地,本地主機測試,但將被部署在運行/生產? 如果是這樣,最簡單的方法是使您的本地主機環境與生產匹配(即,從本地IIS路徑中刪除/c2c/ )。

如果沒有,並且/c2c/就是所有東西都可以在生產中使用的地方,那么在您的jQuery代碼中使用/c2c/WebServices/AddressWebService.svc/GetCountry這樣的URL就足夠了。 即使您需要更改它們,搜索/替換url: "/c2c/ => url: "/也是相對安全/容易的重構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM