2013-03-23 85 views
0

我正在使用jQuery調用Web服務,並且我有一個很奇怪的問題,那就是我整個上午都遇到了問題。當我在我的開發環境中調用Web服務時,一切正常。投入生產時,我從Firebug獲得「301永久移動38毫秒」。Web服務在生產環境中返回「在生產環境中永久移動301錯誤

我有我的劇本是這樣的:

var data = '{"product":"' + productName + '", "from":"' + from + '", "question":"' +  question + '", "phone":"' + phone + '", "type":"' + typeOfMail + '"}'; 
$.ajax({ 
    type: "POST", 
    datatype: "json", 
    data: data, 
    url: '<%= Page.ResolveUrl("~/Services/MailService.asmx/SendProductEmail") %>', 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
     resetContactControls(); 
     $('#<%=AskQuestionProductBtn.ClientID %>').hide(); 
    }, 
    failure: function (data) { 
    } 
}); 

這編譯成以下URL生產:

url: '/Services/MailService.asmx/SendProductEmail' 

在我的生產環境,使用Firebug我可以看到它試圖達到我的網址:

http://www.hcemballering.dk/Services/MailService.asmx/SendProductEmail 

當手動嘗試打開此URL時,我打了我的web服務。我也嘗試更改網址,以便使用普通的../Services/MailService.asmx/SendProductEmail。

我也試着看看我的安全設置,它應該工作(所有進程都有權訪問)。我甚至試圖給用戶「每個人」完全訪問「服務」,所以它不應該是問題。

這是我的web服務類:

[ScriptService] 
public class MailService : System.Web.Services.WebService { 

    ILog logger = LogManager.GetLogger(typeof(MailService)); 

    [WebMethod] 
    public bool SendProductEmail(string product, string from, string question, string phone, string type) 
    { 
     try 
     { 

      StringBuilder content = new StringBuilder(); 

      content.AppendLine(
       string.Format(
        "Produkt:<br/>{0}<br/><br/>Fra email:<br/>{1}<br/><br/>Telefon:<br/>{2}<br/><br/>Type af henvendelse:<br/>{3}<br/><br/>Spørgsmål:<br/>{4}", 
        product, from, phone, type, question)); 
      var module = new MailModule(content.ToString(), "Kontakt om HC produkt: " + product); 
      module.SendMail(); 
     } 
     catch (Exception exp) 
     { 

      throw new Exception("Mailen blev desværre ikke sendt, da der skete en fejl"); 
     } 


     return true; 
    } 

} 

任何想法?

+1

等一下。在另一個說明中,你是否自串聯一個JSONified字符串?你可以把它作爲一個對象字面值並將它傳遞給jQuery,並且jQuery將負責將它字符串化...... *正確*。 (我會建議不要JSON化自己。)如果想要理解和/或弄清楚它爲什麼不起作用,那麼使它更加理智(如在小提琴中)。 – 2013-03-23 13:52:01

回答

3

好的,這很愚蠢。

這是由我的web.config中的規則引起的。我有以下規則:

<rule name="LowerCaseRule1" stopProcessing="true"> 
      <match url="[A-Z]" ignoreCase="false"/> 

      <action type="Redirect" url="{ToLower:{URL}}"/> 
     </rule> 

當然,我的網址不是小寫。所以我這樣做:

<rule name="LowerCaseRule1" stopProcessing="true"> 
      <match url="[A-Z]" ignoreCase="false"/> 
      <conditions> 
      <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml)|(asmx))$" ignoreCase="true" negate="true"/> 
      </conditions> 
      <action type="Redirect" url="{ToLower:{URL}}"/> 
     </rule> 

也取得一切小寫的,只是因爲它的好作風反正。

它的工作原理!

+1

謝謝Lars .solution爲我工作 – 2015-01-29 11:15:35

0

當您手動打開Web服務時,您正在使用GET。你ajax使用POST。您的Web服務是否設置爲接收POST?

+0

你可以看到代碼。我需要添加一些屬性嗎?如果它在開發中有效,我猜它會在生產中起作用嗎? – 2013-03-23 13:41:28

+1

查看它爲默認設置設置的代碼,即POST和JSON。 301意味着它被重定向。你是否遵循所有重定向? – 2013-03-23 13:44:46

+0

據我所知,一個AJAX調用將始終在301之後,所以它應該這樣做 – 2013-03-23 13:46:58