我在VS2012中创建了一个Windows托管的SignalR集线器:
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
public static class SignalR
{
public static void Start()
{
const string url = "http://*:8080";
WebApp.Start<Startup>(url);
}
}
public class Broadcaster : Hub
{
public void SendDownloadResult(bool result, string device, string description, string connectionId, string task)
{
var context = GlobalHost.ConnectionManager.GetHubContext<Broadcaster>();
context.Clients.Client(connectionId).sendDownloadResult(result, device, description, task);
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在3台不同的PC上部署了这个Windows服务,它可以在两台PC上正常工作,但另一方面,当我尝试浏览时,我得到HTTP 503服务不可用 http://localhost:8080/signalr/hubs
在所有3台PC上执行代码时不会抛出异常.
我已经在添加/删除Windows功能中检查了IIS的功能,它们都是一样的.
我错过了什么?
我在这里按照教程:
http://www.asp.net/web-api/overview/releases/whats-new-in-aspnet-web-api-21#download
我在Visual Studio 2012(.NET Framework 4.5)中创建了一个MVC Web Api项目,并在我的NuGet包管理器控制台安装包中运行此命令Microsoft.AspNet.WebApi
当我尝试构建我的项目时,我收到此错误:
'CommonServices.Areas.HelpPage.XmlDocumentationProvider' does not implement interface member
'System.Web.Http.Description.IDocumentationProvider.GetDocumentation(System.Web.Http.Controllers.HttpControllerDescriptor)' c:\users\administrator\documents\visual studio 2012\Projects\CommonServices\CommonServices\Areas\HelpPage\XmlDocumentationProvider.cs
'CommonServices.Areas.HelpPage.XmlDocumentationProvider' does not implement interface member
'System.Web.Http.Description.IDocumentationProvider.GetResponseDocumentation(System.Web.Http.Controllers.HttpActionDescriptor)' c:\users\administrator\documents\visual studio 2012\Projects\CommonServices\CommonServices\Areas\HelpPage\XmlDocumentationProvider.cs
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我有以下选择/选项
<select class="bs-select form-control">
<option value="AL">Alabama</option>
<option value="WY">Wyoming</option>
</select>
Run Code Online (Sandbox Code Playgroud)
在我的脚本部分,我有这个,它工作正常.风格正在应用
$(document).ready(function () {
$('.bs-select').selectpicker();
});
Run Code Online (Sandbox Code Playgroud)
我有一个按钮来执行此操作:
$('.bs-select').append($('<option>', {
value: 0,
text: "test"
}));
Run Code Online (Sandbox Code Playgroud)
但是我的选择列表没有刷新.
我尝试添加
$('.bs-select').selectpicker();
Run Code Online (Sandbox Code Playgroud)
追加后但它仍然无法正常工作.
如果我删除了$('.bs-select').selectpicker()
in,我的选择列表会刷新$(document).ready
如何在添加项目后让我的列表刷新?
是否可以从.NET 2.0客户端调用Web Api方法?
请参考此处的指南:http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client
其中一些客户端的dll似乎与.NET 2.0不兼容
有没有办法从.NET 2.0客户端调用Web Api方法而不添加任何dll?
我有一个以下方法连接到程序启动时的终点
ChannelSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
var remoteIpAddress = IPAddress.Parse(ChannelIp);
ChannelEndPoint = new IPEndPoint(remoteIpAddress, ChannelPort);
ChannelSocket.Connect(ChannelEndPoint);
Run Code Online (Sandbox Code Playgroud)
我还有一个定时器,设置为每60秒触发一次CheckConnectivity
,它会尝试将任意字节数组发送到终点,以确保连接仍然存在,如果发送失败,它将尝试重新连接.
public bool CheckConnectivity(bool isReconnect)
{
if (ChannelSocket != null)
{
var blockingState = ChannelSocket.Blocking;
try
{
var tmp = new byte[] { 0 };
ChannelSocket.Blocking = false;
ChannelSocket.Send(tmp);
}
catch (SocketException e)
{
try
{
ReconnectChannel();
}
catch (Exception ex)
{
return false;
}
}
}
else
{
ConnectivityLog.Warn(string.Format("{0}:{1} is null!", ChannelIp, ChannelPort));
return false;
}
return true;
}
private …
Run Code Online (Sandbox Code Playgroud) 我有以下代码从客户表中检索数据
var customers= context.CustomerEntities.Include("Addresses").Select(Mapper.Map).ToList();
Run Code Online (Sandbox Code Playgroud)
映射器函数将实体对象映射到业务对象,它看起来像这样
internal static Customer Map(CustomerEntity entity)
{
if (entity == null)
return null;
return new Customer
{
Id = entity.Id,
Name = entity.Name,
Addresses = Map(entity.Addresses)
};
}
Run Code Online (Sandbox Code Playgroud)
现在,上面的代码运行良好.
但是,当我尝试这样做时:
var customers= context.CustomerEntities.Select(Mapper.Map).ToList();
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:There is already an open DataReader associated with this Command which must be closed first
执行Mapper函数时.
现在我知道要解决这个问题,我必须multipleactiveresultsets=True
在我的连接字符串中设置.我试过了,它确实解决了我的问题.
但是,当我运行SQL事件探查器时,从实体框架查询所有客户也会自动检索所有地址,即使我不需要它们.
除了必须设置之外还有解决方法multipleactiveresultsets=True
吗?我不希望地址一直延迟加载.
我有我的服务器控制台应用:
static void Main(string[] args)
{
string url = "http://localhost:8080";
using (WebApp.Start(url))
{
MyHub hub = new MyHub();
Console.WriteLine("Server running on {0}", url);
var key = Console.ReadLine();
while (key != "quit")
{
hub.Send("Server", key);
}
}
}
public class MyHub : Hub
{
public void Send(string name, string message)
{
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.addMessage(name, message);
}
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
Run Code Online (Sandbox Code Playgroud)
我的.NET客户端应用程序
static void Main(string[] args)
{
MainAsync().Wait();
Console.ReadLine();
} …
Run Code Online (Sandbox Code Playgroud) 我在这里有以下代码:
$('input[type="checkbox"][id="gridlines"]').change(function () {
alert('hello world');
});
$('#gridlines').prop('checked', true);
Run Code Online (Sandbox Code Playgroud)
当我加载页面时,选中复选框,但不会提示"hello world"
但是,当我手动单击复选框时,会出现"hello world"
是什么赋予了?
我有3张桌子,
1)客户(Id,Name,bla bla)
2)CustomerGroups(GroupId,GroupName)
3)CustomerInGroups(CustomerId,GroupId)
using (var context = DataObjectFactory.CreateContext())
{
context.Customers.Add(entity);
context.SaveChanges();
return entity.Id;
}
Run Code Online (Sandbox Code Playgroud)
如何在CustomerInGroups中添加记录?EntityFramework不会为这样的多对多映射表生成实体
编辑:
Customer和CustomerGroups中的Id列都设置为自动增量.
所以在我的CustomersGroup表中,我有
Id Name
----------------------------
1 Normal
2 VIP
Run Code Online (Sandbox Code Playgroud)
我尝试这样做,因为其中一张海报建议:
entity.CustomerGroups = new List<CustomerGroup>
{
new CustomerGroup {Id = 2 }
};
context.Customers.Add(entity);
context.SaveChanges();
return entity.Id;
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,而不是像这样在映射表中创建一条记录:
CustomerId GroupId
----------------------------
1 2
Run Code Online (Sandbox Code Playgroud)
我得到的是
CustomerInGroups
CustomerId GroupId
----------------------------
1 3
CustomerGroups
Id Name
----------------------------
1 Normal
2 VIP
3 NULL
Run Code Online (Sandbox Code Playgroud)
它实际上在我的CustomerGroups表中创建了另一个条目,这不是我想要的
我正在使用一个名为的jQuery库 bootbox
bootbox.dialog({
title: "Group",
buttons: {
success: {
label: "OK",
className: "btn-success",
callback: function () {
postForm();
}
}
}
});
function postForm() {
$.ajax({
type: "POST",
url: $("#add-group").val(),
data: $("#form").serialize(),
success: function (data) {
return true;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
return false;
}
});
}
Run Code Online (Sandbox Code Playgroud)
当我点击"确定"按钮时,除非我返回如下的假值:
callback: function () {
return false;
}
Run Code Online (Sandbox Code Playgroud)
对话框将关闭.
在回调函数中,我正在调用postForm
哪个函数对我的服务器端进行AJAX调用以执行某些操作.根据该操作的结果,我想保持对话框仍然打开.
但是因为它是一个AJAX调用,并且结果需要一段时间才能返回,所以postForm()
无论我的结果如何,对话框都会立即关闭.
如何告诉javascript等待ajax调用的结果?
如果我能做到这样的话会很棒:
callback: function () {
var result = await postForm();
return result;
}
Run Code Online (Sandbox Code Playgroud) .net ×7
c# ×6
javascript ×3
asp.net ×2
jquery ×2
signalr ×2
.net-2.0 ×1
async-await ×1
bootbox ×1
html ×1
linq-to-sql ×1
many-to-many ×1
robustness ×1
sockets ×1
tcp-ip ×1
web-services ×1