C# wpf で Web サービスを使用するのは初めてです。winforms を使用して Web サービスの例をダウンロードしました。そのwinformsアプリケーションからサーバーにファイルをアップロードすることができました。ここで、この winforms 機能を既存の WPF アプリケーションとマージしたいと考えています。winforms プロジェクトの Web 参照の下にある「アップローダー」を WPF プロジェクトに取得する方法がわかりません。これは、Web リファレンス「アップローダー」に含まれるコードです。
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.18034
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------
//
// This source code was auto-generated by Microsoft.VSDesigner, Version 4.0.30319.18034.
//
#pragma warning disable 1591
namespace TestUploader.Uploader {
using System;
using System.Web.Services;
using System.Diagnostics;
using System.Web.Services.Protocols;
using System.Xml.Serialization;
using System.ComponentModel;
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.17929")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="FileUploaderSoap", Namespace="http://tempuri.org/")]
public partial class FileUploader : System.Web.Services.Protocols.SoapHttpClientProtocol {
private System.Threading.SendOrPostCallback UploadFileOperationCompleted;
private bool useDefaultCredentialsSetExplicitly;
/// <remarks/>
public FileUploader() {
this.Url = global::TestUploader.Properties.Settings.Default.TestUploader_Uploader_FileUploader;
if ((this.IsLocalFileSystemWebService(this.Url) == true)) {
this.UseDefaultCredentials = true;
this.useDefaultCredentialsSetExplicitly = false;
}
else {
this.useDefaultCredentialsSetExplicitly = true;
}
}
public new string Url {
get {
return base.Url;
}
set {
if ((((this.IsLocalFileSystemWebService(base.Url) == true)
&& (this.useDefaultCredentialsSetExplicitly == false))
&& (this.IsLocalFileSystemWebService(value) == false))) {
base.UseDefaultCredentials = false;
}
base.Url = value;
}
}
public new bool UseDefaultCredentials {
get {
return base.UseDefaultCredentials;
}
set {
base.UseDefaultCredentials = value;
this.useDefaultCredentialsSetExplicitly = true;
}
}
/// <remarks/>
public event UploadFileCompletedEventHandler UploadFileCompleted;
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UploadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public string UploadFile([System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] f, string fileName) {
object[] results = this.Invoke("UploadFile", new object[] {
f,
fileName});
return ((string)(results[0]));
}
/// <remarks/>
public void UploadFileAsync(byte[] f, string fileName) {
this.UploadFileAsync(f, fileName, null);
}
/// <remarks/>
public void UploadFileAsync(byte[] f, string fileName, object userState) {
if ((this.UploadFileOperationCompleted == null)) {
this.UploadFileOperationCompleted = new System.Threading.SendOrPostCallback(this.OnUploadFileOperationCompleted);
}
this.InvokeAsync("UploadFile", new object[] {
f,
fileName}, this.UploadFileOperationCompleted, userState);
}
private void OnUploadFileOperationCompleted(object arg) {
if ((this.UploadFileCompleted != null)) {
System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
this.UploadFileCompleted(this, new UploadFileCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
}
}
/// <remarks/>
public new void CancelAsync(object userState) {
base.CancelAsync(userState);
}
private bool IsLocalFileSystemWebService(string url) {
if (((url == null)
|| (url == string.Empty))) {
return false;
}
System.Uri wsUri = new System.Uri(url);
if (((wsUri.Port >= 1024)
&& (string.Compare(wsUri.Host, "localHost", System.StringComparison.OrdinalIgnoreCase) == 0))) {
return true;
}
return false;
}
}
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.17929")]
public delegate void UploadFileCompletedEventHandler(object sender, UploadFileCompletedEventArgs e);
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "4.0.30319.17929")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
public partial class UploadFileCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs {
private object[] results;
internal UploadFileCompletedEventArgs(object[] results, System.Exception exception, bool cancelled, object userState) :
base(exception, cancelled, userState) {
this.results = results;
}
/// <remarks/>
public string Result {
get {
this.RaiseExceptionIfNecessary();
return ((string)(this.results[0]));
}
}
}
}
#pragma warning restore 1591
これに加えて、設定をwinformsからwpfに移行する方法がわかりません。私のwinformsで:
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="TestUploader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<TestUploader.Properties.Settings>
<setting name="TestUploader_Uploader_FileUploader" serializeAs="String">
<value>http://xxx/videolibrary/Upload/FileUploader.asmx</value>
</setting>
</TestUploader.Properties.Settings>
</applicationSettings>
私の問題の最大の部分は、Web 参照の構造と機能を完全に理解していないことです。これがおそらく、私の質問の言い回しが間違っている可能性がある理由です。
- 編集 -
サービス参照の追加を使用すると、参照がwinformの元の参照とは異なるようです。左側が私の winforms ツリー、右側が私の wpf ツリー