我是在 C# wpf 中使用 web 服务的新手。我使用 winforms 下载了一个 webservice 示例。我设法从该 winforms 应用程序将文件上传到我的服务器。现在我想将此 winforms 功能与我现有的 WPF 应用程序合并。我无法找到如何将我的 winforms 项目中 Web 引用下的“上传器”获取到我的 WPF 项目。这是网络参考“上传器”包含的代码:
//------------------------------------------------------------------------------
// <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>
我最大的问题是我不完全了解网络参考的结构和功能。这可能是我的问题措辞错误的原因。
- 编辑 -
当我使用添加服务引用时,引用似乎与我的 winform 中的原始引用不同。左边是我的 winforms 树,右边是我的 wpf 树