[英]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.