C# - 在VS2008中首次尝试使用WCF

时间:2009-11-25 22:30:17

标签: c# asp.net wcf web-services

我正在写我的第一个SVC并且遗漏了一些东西。这一切都很好,但页面似乎没有从我的服务中返回任何内容。

服务代码:

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);
        }
    }
}

我的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>

当我点击按钮时,似乎没有任何事情发生。我希望会有错误或字符串作为回应。使用FireBug和ServiceCapture不会泄露任何内容。 ServiceCapture不会显示任何请求。

稍微不同一点 - 我需要做些什么才能让Flash和/或Flex应用程序正确调用服务?我也不这么做,所以很好奇这个命令应该是什么样的(给我们的flash / flex开发人员一个样本来工作。)

任何提示,提示和技巧?


忘了说我正在使用http://www.pluralsight.com/community/blogs/fritz/archive/2008/01/31/50121.aspx

中找到的教程

来自我的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>

请原谅我 - 我并不清楚你在寻找什么。当我添加WCF时,我也删除了 not 更改的部分。


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

不太匹配...

1 个答案:

答案 0 :(得分:1)

你能告诉我们你的服务配置吗?你使用什么装订? basicHttp,还是webHttp(REST)?

默认情况下,如果您在WCF中使用SOAP服务,当您导航到* .svc文件的URL位置时,您没有得到太多 - 一个说明已找到服务的页面 - 就此而言。这是设计的。

您可以在SOAP服务上启用元数据(基于WSDL / XSD) - 但您需要明确地执行此操作 - 默认情况下不会发生。

UPDATE:“service config”我的意思是你的web.config中的所有内容都位于<system.serviceModel>部分 - 这就是WCF部分。

您正在将webHttpBinding用于REST Web服务 - 我认为您需要在服务行为中添加“webHttp”行为。我对REST和Ajax不是很熟悉,所以对我来说这是一个有点未知的领域....

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

您可以尝试将<webHttp />添加到您的web.config中,然后从您的服务声明中引用它:

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