我正在通过HTML表单将文件发布到WCF REST服务,enctype
设置为multipart/form-data
和单个组件:<input type="file" name="data">
.由服务器读取的结果流包含以下内容:
------WebKitFormBoundary
Content-Disposition: form-data; name="data"; filename="DSCF0001.JPG"
Content-Type: image/jpeg
<file bytes>
------WebKitFormBoundary--
Run Code Online (Sandbox Code Playgroud)
问题是我不确定如何从流中提取文件字节.我需要这样做才能将文件写入磁盘.
我写了一个流媒体文件的WCF服务.我现在正在编写一个使用此服务的WPF应用程序,并且刚刚发现MediaElement不接受Stream对象作为source属性的输入参数.
过去两天我一直在谷歌上搜索,并看了几个替代品,包括WPF中的Silverlight视口,VLC ActiveX控件,VideoRendererElement和WPFMediaKit.不幸的是,由于缺乏文档和/或示例,我一直受到阻碍,到目前为止还没有取得任何进展.这是我第一次使用WPF这一事实也无济于事.
简而言之,我正在寻找的是文档或示例,它们演示了WPF中的流媒体,如果可能的话,也很容易实现.解决方案不一定是完美的; 我需要的只是有效的东西.
我有一个简单的WCF服务,允许客户端/消费者应用程序通过提供用户名和密码登录.如果用户名和密码都正确,则WCF服务为客户端提供GUID.然后将GUID和用户名存储为WCF服务中的键/值对.从此处开始,客户端将每个请求的GUID作为识别手段发送.
由于我将键/值对存储在Dictionary/Hashmap中,因此只有在WCF服务有状态时,此方法才有效.问题是,它们是默认的有状态还是我必须做些什么来使它们以这种方式表现?
是否可以使用WPF MediaElement从System.IO.Stream对象播放流式视频?正在从存储媒体文件的WCF服务检索Stream对象.
我有一个简单的WCF服务,允许客户/消费者上传图像,音频或视频文件.上传后,服务应该分析文件并以某种方式检索以下属性:
图像:宽度,高度,拍摄日期,使用的程序
音频:运行时,艺术家,专辑,流派,比特率,出版年份
视频:运行时,宽度,高度,帧/秒,视频比特率,音频比特率
显然,Windows可以很容易地获取和显示这些属性,但我如何在C#中实现呢?
我正在尝试将MessageContract添加到我的WCF服务,类似于此问题中的内容:WCF:使用流式传输与消息合同
这是我得到的异常: 无法加载操作"UploadFile",因为它具有System.ServiceModel.Channels.Message类型的参数或返回类型,或具有MessageContractAttribute的类型和不同类型的其他参数.使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数.
这是我的合同:
[ServiceContract]
public interface IFile
{
[OperationContract]
bool UploadFile(FileUpload upload);
}
[MessageContract]
public class FileUpload
{
[MessageHeader(MustUnderstand = true)]
public int Username { get; set; }
[MessageHeader(MustUnderstand = true)]
public string Filename { get; set; }
[MessageBodyMember(Order = 1)]
public Stream ByteStream { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我在app.config中使用的绑定配置:
<netTcpBinding>
<binding name="TCPConfiguration" maxReceivedMessageSize="67108864" transferMode="Streamed">
<security mode="None" />
</binding>
</netTcpBinding>
Run Code Online (Sandbox Code Playgroud)
现在我想这可能与我正在使用的绑定类型有关,但我不完全确定.
WPF是否内置了对任何音频和视频格式的支持?我将使用MediaPlayer和MediaElement类来构建一个小型媒体播放器,而现在,我不想处理.NET本身不支持的编解码器和格式.
我目前正在使用下面的方法来获取最后插入的行的ID.
Database.ExecuteNonQuery(query, parameters);
//if another client/connection inserts a record at this time,
//could the line below return the incorrect row ID?
int fileid = Convert.ToInt32(Database.Scalar("SELECT last_insert_rowid()"));
return fileid;
Run Code Online (Sandbox Code Playgroud)
到目前为止,这种方法工作正常,但我不确定它是否完全可靠.
假设有两个客户端应用程序,每个应用程序都有自己独立的数据库连接,它们在同一时间调用上面的服务器端方法.请记住,客户端线程并行运行,并且SQLite一次只能运行一个操作(或者我听说过),一个客户端实例是否可以返回由插入的记录的行ID另一个例子?
最后,是否有更好的方法来获取最后插入的行ID?
根据2010年的这个帖子,"EnforceFKConstraints"连接字符串属性应该在未来的SQLite版本中实现.有谁知道开发商是否已经开始这样做了?
如果没有,是否有另一种方法可以启用外键支持而不在每个连接上执行"PRAGMA foreign_keys = ON"?我需要这个以确保删除总是级联.
我有一个具有OperationContract的ServiceContract,具有以下方法签名:Manipulate(int fileid, param object[] operations)
.
我还为WCF服务定义了五个DataContracts,我想object[] operations
接受任何数量和组合.问题是除非我在方法签名中使用它们,否则它们不可见.如果我这样做,那么一次只能使用一种类型的DataContract,从而破坏了使用对象[]的目的.
如何在客户端显示所有五个DataContracts而无需更改方法签名?