2009-11-25 5 views
4

J'écris mon premier SVC et il me manque quelque chose. Tout compile bien mais la page ne semble pas retourner quoi que ce soit de mon service.C# - Première tentative avec WCF dans VS2008

Code de service:

namespace RivWorks.Web.Services 
{ 
    [ServiceContract(Namespace = "http://www.rivworks.com/ws/")] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
    public class PlayerService 
    { 
     [OperationContract] 
     public string Decrypt(string interactive) 
     { 
      return RivWorks.Security.Cryptography.Internal.Decrypt(interactive); 
     } 

     [OperationContract] 
     public void LogEvent(Int64 HistoryRequestID, string VideoPath, string Action, string Target, string ClientDateTime, string UrlReferrer, float Offset, string TimeZone) 
     { 
      DateTimeOffset dt = RivWorks.DateTimeInfo.ConvertFromFlash(ClientDateTime); 
      RivWorks.Membership.UserInfo userInfo = RivWorks.DateTimeInfo.GetUserInfo(dt, Offset, TimeZone, "Log Request"); 
      RivWorks.Data.Player.LogEvent(HistoryRequestID, VideoPath, Action, Target, userInfo, UrlReferrer); 
     } 
    } 
} 

Code Mon ASPX:

<body> 
    <form id="form1" runat="server"> 
     <h1>Greeting</h1> 
     <div> 
      <asp:Literal id="PutFrameHere" runat="server" /> 
     </div> 
     <hr /> 
     <asp:ScriptManager ID="SM1" runat="server"> 
      <Services> 
       <asp:ServiceReference Path="~/Services/PlayerService.svc" /> 
      </Services> 
     </asp:ScriptManager> 
     <script type="text/javascript"> 
      function OnDecrypt(result) { 
       www.rivworks.com.ws.PlayerService.Decrypt($get("encryptedText").value, OnDecryptComplete, OnError, null); 
      } 
      function OnDecryptComplete(result) { 
       alert("Complete: " + result.toString()); 
      } 
      function OnError(result) { 
       alert("Error: " + result.toString()); 
      } 
     </script> 
     Enter encrypted string:<input type="text" id="encryptedText" /> 
     <br /> 
     <input type="button" value="Decrypt" onclick="OnDecrypt()"? /> 
    </form> 
</body> 

Lorsque je clique sur le bouton, rien ne semble se passer. Je m'attendrais à une erreur ou une chaîne en réponse. Utiliser FireBug et ServiceCapture ne révèlent rien. ServiceCapture n'affiche aucune demande.

Sur une note légèrement différente - que devrais-je faire pour permettre à une application Flash et/ou Flex d'appeler le service correctement? Je ne fais pas non plus si je suis curieux de savoir à quoi devrait ressembler la commande (pour donner un exemple à nos développeurs flash/flex.)

Des trucs, astuces, astuces?


oublié de dire que j'utilisais un tutoriel trouvé à http://www.pluralsight.com/community/blogs/fritz/archive/2008/01/31/50121.aspx


De mon web.config:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name="RivWorks.Web.Services.PlayerServiceAspNetAjaxBehavior"> 
    <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <services> 
    <service name="RivWorks.Web.Services.PlayerService"> 
    <endpoint address="" behaviorConfiguration="RivWorks.Web.Services.PlayerServiceAspNetAjaxBehavior" 
    binding="webHttpBinding" contract="RivWorks.Web.Services.PlayerService" /> 
    </service> 
    </services> 
</system.serviceModel> 
</configuration> 

Pardonnez-moi - je ne suis pas tout à fait clair sur ce que votre nous recherchons. J'ai également abandonné les sections qui ont fait pas changement quand j'ai ajouté WCF.


<%@ ServiceHost Language="C#" 
       Debug="true" 
       Service="RivWorks.Web.Services.PlayerService" 
       CodeBehind="PlayerService.svc.cs" %> 

Pas tout à fait ... match de

+0

le "service config" est tout dans la section '' - c'est la section de configuration WCF. Tout le reste n'est pas vraiment nécessaire, dans ce cas. –

+0

OK, vous utilisez le "webHttpBinding" pour un service REST. Ce qui me manque maintenant, c'est le fichier PlayerService.svc - vous devez vous assurer de spécifier l'hôte de service correct pour le webHttp –

+0

mis à jour ma réponse - j'espère que cela vous fera aller un peu plus loin! –

Répondre

1

Pouvez-vous nous montrer votre config de service ?? Quelle liaison utilisez-vous? basicHttp, ou webHttp (REST)? Par défaut, si vous utilisez un service SOAP dans WCF, lorsque vous accédez à l'emplacement de l'URL du fichier * .svc, vous obtenez peu - une page indiquant qu'un service a été trouvé - c'est à peu près tout. C'est par conception.

Vous pouvez activer les métadonnées sur les services SOAP (basés sur WSDL/XSD) - mais vous devez le faire explicitement - cela ne se produit pas par défaut. Par "service config" Je veux dire tout dans votre web.config qui se trouve dans la section <system.serviceModel> - c'est la section WCF.

Vous utilisez le webHttpBinding pour un service web REST - vous aurez besoin d'ajouter le comportement "webHttp" à votre comportement de service, je pense. Je ne suis pas très familier avec le repos et l'Ajax, de sorte que c'est un peu un territoire inexploré pour moi ....

<behaviors> 
    <endpointBehaviors> 
    <behavior name="RivWorks.Web.Services.PlayerServiceAspNetAjaxBehavior"> 
    <webHttp /> 
    <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="AjaxRestServiceBehavior"> 
    <webHttp /> 
    </behavior> 
    </serviceBehaviors> 
    </behaviors> 

Pouvez-vous essayer d'ajouter le <webHttp /> à votre web.config, puis référencer de votre service déclaration:

<service name="RivWorks.Web.Services.PlayerService" 
     behaviorConfiguration="AjaxRestServiceBehavior"> 
+0

Ajout d'informations web.config à mon message (ci-dessus). Vous ne savez pas ce que vous entendez par "service config" ... –

+0

Ajout de la définition du service (ci-dessus). Pas tout à fait pareil ... Je suis un peu perdu mais pense que je suis en train de suivre. (Je n'aime pas être un débutant parfois - lol) –

+0

En outre, il semble bien sur Win2003/IIS6 (notre serveur de développement), mais pas sur ma machine locale (Win7/IIS7). http://dev.rivworks.com/services/playerservice.svc –

Questions connexes