Ajax Appel de Service Web - Pas de "Access-Control-Allow-Origin' en-tête est présent

Heyya,

Je sais que cette question a été posée et j'ai lu chaque et chaque réponse de chaque question ici, mais encore ne peut pas sembler obtenir mon projet fonctionne correctement. Mon scénario est un peu différent des autres questions cependant, vous ne savez pas si cela fait une différence, mais ici nous allons.

J'ai un projet de web services. Services seul fonctionne très bien, il n'y a pas de problème avec ça. Et il y a de ça un autre projet qui s'occupe de l'INTERFACE utilisateur de la part de choses et d'appeler ces services par le biais de jquery ajax. Il a été fonctionne bien parce que je n'ai pas testé ce cas sur Google Chrome avant. Tout fonctionne parfaitement sur Internet Explorer.

Maintenant; mon service web application s'exécute sur le port 40000 (localhost:40000) et l'INTERFACE utilisateur projet s'exécute sur un autre port aléatoire mais toujours dans le localhost. Comme je l'ai dit, mes appels ajax etc fonctionne parfaitement sur Internet explorer, mais quand il s'agit de Google Chrome, il échoue. La console affiche le message d'erreur suivant:

XMLHttpRequest cannot load http://127.0.0.1:40000/abc.asmx/TheMethodName. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:17256' is therefore not allowed access. The response had HTTP status code 400.

Par le façon, il était comme "localhost:40000" avant de sorte que certains post sur l'internet a suggéré que je devrais la changer en une adresse IP à la place de localhost.

De toute façon, j'ai édité mon web.fichier de config sur mon projet de service web et a ajouté ce qui suit (qui n'a aucun sens)

<system.serviceModel>
  <bindings>
    <webHttpBinding>
      <binding name="crossDomain" crossDomainScriptAccessEnabled="true">
      </binding>
    </webHttpBinding>
  </bindings>

  <behaviors>

    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
      </behavior>
    </serviceBehaviors>

  </behaviors>

  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>


<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
  <httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="http://localhost:17256" />
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
      <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
      <add name="Access-Control-Max-Age" value="1728000" />

    </customHeaders>
  </httpProtocol>
</system.webServer>

BTW, si j'utilise la première ligne: il échoue complètement et dit l'en-tête de réponse des messages ne correspondent pas et je ne peux même pas démarrer le service invoquer.

Et oui, j'ai aussi édité mon appel ajax, a ajouté le paramètre suivant:

crossDomain: true,

Maintenant, ce qui me manque ici? J'ai été sur cela pendant des jours maintenant et je suis sur le point de perdre mon esprit 🙂 Elle est un peu trop tard pour changer la structure de l'ensemble du projet (service de style de l'INTERFACE utilisateur, je veux dire), puisque les charges de code ont été écrites pour les services de l'INTERFACE et de projets. S'il vous plaît aider, je suis désespérée! 🙂

Acclamations


Edit:

Il s'avère donc j'ai besoin d'utiliser JSONP, pas de JSON - car il n'est pas coincé avec le Contrôle d'Accès de chose, ce qui est bien. Je peux convertir mes appels ajax en JSONP. Mais j'ai besoin d'une autre aide 🙂

J'ai écrit un mondial ajax méthode qui est appelée à partir de chaque opération séparées sur les pages et il fonctionne comme un charme (sur Internet Explorer à nouveau, bien sûr). Maintenant que dois-je faire pour convertir cette fonction wrapper dans un jsonp truc?

function RemoteCall(WebService, RemoteMethod, RemoteParameters, callbackResult) {

if (RemoteParameters == null || RemoteParameters == "") {
    RemoteParameters = "{ }";
}

var remoteCall = $.ajax({
    type: "POST",
    url: ProvideService(WebService, RemoteMethod),
    data: RemoteParameters,
    contentType: ajaxContentType,
    dataType: ajaxDataType,
    async: true,
    crossDomain: true,
    success: function (msg) {
        msg.header("Access-Control-Allow-Origin", "*");
        callbackResult(msg.d);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        callbackResult(xhr.status + '\r\n' + thrownError + '\r\n' + xhr.responseText);
    }
});

}

J'ai vu quelques posts que je devrais ajouter une propriété comme jsonp: 'jsonp_callback" avec la méthode de rappel (c'est là où je suis confus). Quoi à ce sujet?

Une autre chose; j'ai envoyé mon json paramètres en tant que texte dans une variable comme

var jSONParams = '{ UserID: "1", EmailAddress: "[email protected]" }'; 

Dois-je continuer à envoyer ce que le même format ou doit-elle être convertie à une sorte d'objet JSON ou quelque chose?

BTW: mes ajax fonction est complètement séparée fichier JS - ne sais pas si cela fait une différence si...

Acclamations

sérieusement personne?
Le point de terminaison à l'aide de n'importe quel type d'authentification? L'authentification Windows, etc?

OriginalL'auteur | 2015-05-07