Talvez já tenham notado que executar um WCF via JavaScript não é tão fácil como parece ou como era a chamada de um tradicional Web Services .ASMX .
Isto porque por padrão, no WCF, este tipo de execução no Client vem desabilitado.
Desta forma, segue um tutorial para uma execução bem sucedida no seu JScript.
1 - Habilitar compatibilidade de execução ASP.NET na sua classe. Para tanto, adicione a diretiva, conforme exemplificado abaixo:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
2 - Implementar as diretivas na sua INTERFACE de classe, conforme exemplo abaixo:
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Xml)]
string MyMethod(string p1, string p2);
}
3 - Implementar o seguinte WEB.CONFIG:
P.S.: Se você estiver executando uma URL segura (httpS) use a propriedade [httpsGetEnabled] senão [httpGetEnabled] na seção [serviceMetadata]
P.S.2: Não esqueça de trocar as frases [YOURNAMESPACE] e [YOURURL] pelas respectivas informações reais do seu projeto.
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<identity impersonate="true" />
<customErrors mode="Off"/>
<httpModules>
<clear/>
</httpModules>
</system.web>
<system.serviceModel>
<standardEndpoints>
<webScriptEndpoint>
<standardEndpoint name="" crossDomainScriptAccessEnabled="true"/>
</webScriptEndpoint>
</standardEndpoints>
<services>
<service name="YOURNAMESPACE.Service1" behaviorConfiguration="ServiceBehaviors">
<endpoint name="Endpoint"
address="http://YOURURL/Service1.svc"
binding="webHttpBinding"
contract="YOURNAMESPACE.IService1"
behaviorConfiguration="WCFAjaxBehavior"
bindingConfiguration="webBinding" />
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="WCFAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviors">
<serviceDiscovery />
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="false" />
<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="Transport"></security>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
<system.webServer> <modules runAllManagedModulesForAllRequests="true"/>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
4 - E como último passo, a execução do seu WCF via JScript:
var url = "http://YOURURL/Service1.svc/MyMethod";
var client = null;
if (window.XMLHttpRequest)
client = new XMLHttpRequest();
else if (window.ActiveXObject)
client = new ActiveXObject("Microsoft.XMLHTTP");
var data = '{';
data += '"p1":"' + "SOMEVALUE" + '"';
data += ',';
data += '"p2":"' + "SOMEVALUE" + '"';
data += '}';
client.open ('POST', url, false);
client.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
client.send(data);
var resultValue = client.responseText;
That's It!
Nenhum comentário:
Postar um comentário
<< Ao enviar um comentário, favor clicar na opção [Enviar por e-mail comentários de acompanhamento para gtezini@gmail.com] >>