WCFのクライアントからサービスへファイルを送信するサンプルです。
サービス側の実装
app.config
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <service behaviorConfiguration="myServiceBehavior" name="FileStorage.Storage"> <endpoint address="" binding="basicHttpBinding" contract="FileStorage.IFileStorage" /> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:8000/Storage/" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior name="myServiceBehavior"> <serviceMetadata httpGetEnabled="True"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
Program.cs ※間違えてクライアント側のソースをUpしていたのを修正。(2011/07/05)
using System; using System.IO; using System.ServiceModel; namespace FileStorage { [ServiceContract] public interface IFileStorage { [OperationContract] void Upload(string fileName, byte[] contents); } public class Storage : IFileStorage { public void Upload(string fileName, byte[] contents) { File.WriteAllBytes(Path.Combine(@"d:\sandbox\filestorage", fileName), contents); } } public class Service { static void Main() { using(ServiceHost serviceHost = new ServiceHost(typeof(Storage))) { serviceHost.Open(); Console.ReadLine(); } } } }
クライアント側の実装
app.config(先のウィザードで自動作成される)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IFileStorage" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:8000/Storage/" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFileStorage" contract="ServiceReference.IFileStorage" name="BasicHttpBinding_IFileStorage" /> </client> </system.serviceModel> </configuration>
Program.cs
using System.IO; using FileUploader.ServiceReference; namespace FileUploader { class Program { static void Main(string[] args) { using(FileStorageClient proxy = new FileStorageClient()) { const string SourceFilePathName = @"D:\Sandbox\temp\Hoge.txt"; const string DestinationFileName = "Fuga.txt"; proxy.Upload(DestinationFileName, File.ReadAllBytes(SourceFilePathName)); } } } }