我正在写我的第一个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" %>
不太匹配...
答案 0 :(得分:1)
你能告诉我们你的服务配置吗?你使用什么装订? basicHttp,还是webHttp(REST)?
默认情况下,如果您在WCF中使用SOAP服务,当您导航到* .svc文件的URL位置时,您没有得到太多 - 一个说明已找到服务的页面 - 就此而言。这是设计的。
您可以在SOAP服务上启用元数据(基于WSDL / XSD) - 但您需要明确地执行此操作 - 默认情况下不会发生。
<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">