决定是使用PerSession还是使用PerCall的一般经验法则是什么?
我有一个稍微沉重的(我认为..)WCF服务,包含大约80个表的CRUD方法.
我已将WCF服务分为1个服务中的7个合同(即1个服务中的7个端点),这样每个合同都会处理自己的域,例如我有一个销售合同,所以所有与销售相关的表,以及相应的操作在销售"有界环境"内
所以我的WCF服务结构看起来像这样:
public partial class ABCService : ISalesService
{
//CRUD methods of all tables related to Sales
}
public partial class ABCService : IMarketingService
{
//CRUD methods of all tables related to Marketing
}
public partial class ABCService : ICustomerService
{
//CRUD methods of all tables related to Customer
}
public partial class ABCService : IProductService
{
//CRUD methods of all tables related to Products
}
Run Code Online (Sandbox Code Playgroud)
我对PerCall的关注是,因为我有一个相当大的DB/WCF服务,我担心每次呼叫所消耗的资源量乘以用户数量和他们调用服务的速率将是太棒了.
我不知道细节,但我已经知道创建一个频道代理是昂贵的操作.
哦,我使用手动编码代理而不是VS的添加服务引用来使用我的WCF服务.
所以,我的问题是,我应该使用哪个?PerSession或PerCall?
更新:
我有一个相当大的数据库,大约有80个左右的表.所以我决定将表分成有界上下文,而不是在一个大的edmx文件中包含所有80个表.
所以我有像销售,客户等有限的背景.
我的客户edmx文件中有我的主要客户表.但是,我还需要从Sales edmx上下文的customer表中访问某些字段,而不是所有字段,但只需要1或2个字段(例如,我只需要客户名称,而不是整个客户对象/表).
我是否必须将整个客户表添加到Sales edmx文件中?这种情况的最佳做法是什么?
.net domain-driven-design entity-framework edmx bounded-contexts
我可以在开发期间查看我的图标,但是在使用visual studio的构建部署包创建部署包并将其托管在我的本地(同一台PC)IIS7.5服务器上之后,图标不会显示.我刚给他们所有人一个空白框
我检查了路径,图像在那里.
我用Google搜索,发现有人遇到了同样的问题,但是他正在使用apache托管他的网络项目,所以他所做的就是将他所有的文件和文件夹chmod到777.
我在IIS7.5中做了同样的事情,我授予了我的文件夹读/写权限,但它们仍然没有出现.我是通过处理程序映射>内容视图>编辑权限完成的.我为所有用户提供了具有glyphicons.png完全控制权的文件夹,以确保无误.
仍然没有出现.还有什么可以检查的?
我有一个设置为PerCall的WCF服务
我想知道如何从客户端发送一个Start调用以启动一个长时间运行的进程,并发送一个Cancel命令来取消它
我的WCF服务看起来像这样
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1 : IService1
{
CancellationTokenSource cancelToken = new CancellationTokenSource();
public void Start()
{
var compute = Task.Factory.StartNew(StartLongRunningTask, cancelToken.Token);
}
public void Stop()
{
cancelToken.Cancel();
}
private void StartLongRunningTask()
{
//process here
}
}
Run Code Online (Sandbox Code Playgroud)
我想这里的问题是,每次呼叫到达服务器时,它都被视为新请求.
那么如何在WCF中启动和取消长时间运行的任务呢?
编辑:我将它作为Windows服务托管
我正在编写一个应用程序,需要通过tcp进行数百个套接字连接才能读/写数据.
我在这里遇到过这段代码片段,我想知道如何让它更强大.
这是我目前调用代码的方式:
foreach (var ip in listofIps)
{
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ip), 4001);
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
client.Connect(remoteEP);
await ReadAsync(client);
}
Run Code Online (Sandbox Code Playgroud)
以上是否有任何问题,如何进行优化以使其同时运行?
在代码片段中,缓冲区大小设置为1000.正如一个简单的说明,如果我只尝试打印出接收的字节,而不是剩余的0x00,我必须做这样的事情:
while (true)
{
await s.ReceiveAsync(awaitable);
int bytesRead = args.BytesTransferred;
if (bytesRead <= 0) break;
var hex = new StringBuilder(bytesRead * 2);
var msg = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++)
msg[i] = args.Buffer[i];
foreach (byte b in msg)
hex.AppendFormat("{0:x2} ", b);
AppendLog(string.Format("RX: {0}", hex));
} …Run Code Online (Sandbox Code Playgroud)假设我有一个数组
LogoDataBy
{byte[0x00000008]}
[0x00000000]: 0x41
[0x00000001]: 0x42
[0x00000002]: 0x43
[0x00000003]: 0x44
[0x00000004]: 0x31
[0x00000005]: 0x32
[0x00000006]: 0x33
[0x00000007]: 0x34
Run Code Online (Sandbox Code Playgroud)
我想创建一个任意长度的数组,并将其填充 0x00
newArray
{byte[0x00000010]}
[0x00000000]: 0x00
[0x00000001]: 0x00
[0x00000002]: 0x00
[0x00000003]: 0x00
[0x00000004]: 0x00
[0x00000005]: 0x00
[0x00000006]: 0x00
[0x00000007]: 0x00
[0x00000008]: 0x41
[0x00000009]: 0x42
[0x0000000a]: 0x43
[0x0000000b]: 0x44
[0x0000000c]: 0x31
[0x0000000d]: 0x32
[0x0000000e]: 0x33
[0x0000000f]: 0x34
Run Code Online (Sandbox Code Playgroud)
我这里有我现在的片段
string test = "ABCD1234";
byte[] LogoDataBy = ASCIIEncoding.ASCII.GetBytes(test);
var newArray = new byte[16];
var difference = newArray.Length - LogoDataBy.Length;
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 我有以下Kendo上传控件
@(Html.Kendo().Upload()
.Name("files")
.Async(a => a
.Save("SaveBackgroundImage", "Plans")
.AutoUpload(true))
.Multiple(false)
.Events(events => events.Success("onSuccess")))
Run Code Online (Sandbox Code Playgroud)
我的控制器:
public ActionResult SaveBackgroundImage(IEnumerable<HttpPostedFileBase> floorplanFiles, string floorplanId)
{
foreach (var file in files)
{
string fileName = "ABC.jpg" //this will be random
var physicalPath = Path.Combine(Server.MapPath("~/Images/Floorplans/Fullsize"), fileName);
file.SaveAs(physicalPath);
}
// Return an empty string to signify success
return Content("");
}
Run Code Online (Sandbox Code Playgroud)
我的javascript:
function onSuccess(e) {
var filename = getFileInfo(e);
alert(filename);
}
function getFileInfo(e) {
return $.map(e.files, function (file) {
var info = file.name;
return info;
}).join(", ");
} …Run Code Online (Sandbox Code Playgroud) 是否有正则表达式(或任何其他方式)来检查字符串中的数字是否在运行顺序?
例如,
"123456" will return true
"456789" will return true
"345678" will return true
"123467" will return false
"901234" will return false
Run Code Online (Sandbox Code Playgroud) 我从VS2017创建了一个.NET核心Web应用程序
添加了docker支持
从VS运行docker compose
收到此错误
MSB4018 The "PrepareForLaunch" task failed unexpectedly.
Microsoft.DotNet.Docker.CommandLineClientException: Creating network "dockercompose3401809455_default" with the default driver
Building webapplication1
Creating dockercompose3401809455_webapplication1_1
ERROR: for webapplication1 Cannot start service webapplication1: error while creating mount source path '/C/Users/admin/clrdbg': mkdir /C/Users/admin/clrdbg: permission denied
Encountered errors while bringing up the project..
Run Code Online (Sandbox Code Playgroud)
我有
我还缺少什么?
这是docker compose yml
version: '2'
services:
webapplication1:
image: webapplication1:dev
build:
args:
source: ${DOCKER_BUILD_SOURCE}
environment:
- DOTNET_USE_POLLING_FILE_WATCHER=1
volumes:
- ./WebApplication1:/app
- ~/.nuget/packages:/root/.nuget/packages:ro
- ~/clrdbg:/clrdbg:ro
entrypoint: tail -f /dev/null
labels: …Run Code Online (Sandbox Code Playgroud) 嗨,我正在尝试触发对以下API的 POST 调用。这是代码
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", key);
var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["returnFaceId"] = "true";
queryString["returnFaceLandmarks"] = "false";
queryString["returnFaceAttributes"] = "age,gender";
var filebytes = File.ReadAllBytes(@"C:\Users\user1\Desktop\IMG.jpg");
var uri = "https://southeastasia.api.cognitive.microsoft.com/face/v1.0/detect?" + queryString;
HttpResponseMessage response;
using (var content = new ByteArrayContent(filebytes))
{
response = client.PostAsync(uri, content).Result;
var result = response.Content.ReadAsStringAsync().Result;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误result:
{"error":{"code":"BadArgument","message":"JSON parsing error."}}
Run Code Online (Sandbox Code Playgroud)
如果我使用application/json, 并传递 http 链接,则此代码工作正常。
c# ×7
.net ×6
asp.net-mvc ×2
wcf ×2
.net-core ×1
async-await ×1
asynchronous ×1
bytearray ×1
docker ×1
edmx ×1
glyphicons ×1
iis ×1
javascript ×1
kendo-ui ×1
kendo-upload ×1
logic ×1
padding ×1
performance ×1
regex ×1
rest ×1
sockets ×1
tcpclient ×1